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

Antonio, Fabio Di Narzo antonio.fabio at gmail.com
Thu Nov 23 18:40:50 CET 2006


2006/11/23, Gabor Grothendieck <ggrothendieck a gmail.com>:
> On 11/23/06, Gabor Grothendieck <ggrothendieck a gmail.com> wrote:
> > On 11/23/06, Antonio, Fabio Di Narzo <antonio.fabio a gmail.com> wrote:
> > > 2006/11/23, Prof Brian Ripley <ripley a 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")
>

Many thanks!
This works as I want, and can be eventually encapsulated in a sort of
"safedump" function for convenience.
More generally, interesting to learn that using
"attributes<-"
has no side effects (i.e., attributes aren't set by using accessor
functions, isn't it?), as opposed to using 'structure' named
arguments, so can be more convenient in building R objects with
arbitrary attributes (at useR risk...).

-- 
Antonio, Fabio Di Narzo
Ph.D. student at
Department of Statistical Sciences
University of Bologna, Italy



More information about the R-help mailing list