[R] dumping/loading objects with 'tsp' attribute

Gabor Grothendieck ggrothendieck at gmail.com
Thu Nov 23 18:11:30 CET 2006


On 11/23/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> On 11/23/06, Antonio, Fabio Di Narzo <antonio.fabio at gmail.com> wrote:
> > 2006/11/23, Prof Brian Ripley <ripley at stats.ox.ac.uk>:
> > > On Thu, 23 Nov 2006, Antonio, Fabio Di Narzo wrote:
> > >
> > > > Dear all,
> > > > I'm indirectly faced with the fact that setting the 'tsp' attribute of
> > > > an object modifies its class definition:
> > > >> class( structure(1:2, tsp=c(1,2,1), class=c("myts","ts")) )
> > > > [1] "ts"   "myts"
> > > >
> > > > In general, this is of really little (ok, I admit: totally no)
> > > > interest for me because 'myts' class is added just after assigning the
> > > > 'tsp' attribute (by calling ts).
> > > > However, this behaviour gives me troubles when re-loading a previously
> > > > deparsed object, so that:
> > > >> x <- ts(1:2)
> > > >> class(x) <- c("myts", class(x))
> > > >> dput( x , "temp.dat")
> > > >> class(dget("temp.dat"))
> > > > [1] "ts"   "myts"
> > > >> unlink("temp.dat")
> > > >
> > > > In other words, my real problem should be restated as: how to safely
> > > > dump (and then load) an object which has a (perhaps valid) "tsp"
> > > > attribute?
> > > > More generally: can someone suggest me a safer way to dump/restoring R objects?
> > >
> > > save/load.
> >
> > Ok. That seems to be the final statement: to be sure about the result,
> > I have to use binary files for storing R objects (even pure data
> > objects with attached attributes) instead of dumped R code.
>
> If its mainly ascii you are after but the source file part is not important
> then note that save can save to ascii files:
>
> y <- x
> save("x", file = "temp.rda", ascii = TRUE)
> rm(x)
> load("temp.rda")
> identical(x, y)
> readLines("temp.rda")
> unlink("temp.rda")

and here is a workaround if you are willing to do a bit of work when
outputting the objects:


# test data
x <- ts(1:2)
class(x) <- c("myts", "ts")
y <- x

# need 3 output statements
dump("x", "temp.R")
write("attributes(x) <-", "temp.R", append = TRUE)
write(deparse(attributes(x)), "temp.R", append = TRUE)

# source it back in and check
rm(x)
source("temp.R")
identical(x,y)
readLines("temp.R")

# clean up
unlink("temp.R")



More information about the R-help mailing list