On Jan 10, 2012, at 1:06 AM, Jeroen Ooms wrote: > The underlying problem turns out to be serialization of objects of > class "NativeSymbolInfo". When these are serialized and unserialized, > the memory address turns into a nullpointer, causing the fail. To fix > it, one can simply create new nativeSymbolInfo objects. E.g: > > # The old example: > library(lattice); > histogram(rnorm(100)); > x <- recordPlot(); > saveRDS(x, "myplot.rds"); > y <- readRDS("myplot.rds"); > > # y contains nullpointers making it fail. > print(y); > > # To fix: > for(i in 1:length(y[[1]])) { > if( "NativeSymbolInfo" %in% class(y[[1]][[i]][[2]][[1]]) ){ > y[[1]][[i]][[2]][[1]] <- getNativeSymbolInfo(y[[1]][[i]][[2]][[1]]$name); > } > } > print(y); > > Now this works, but it is a bit ugly. Is there a more general method > of serializing objects in a way that native objects are restored where > possible? >
Unfortunately R doesn't provide a way for this. Without changes to unserialization (on the wishlist for a few years now, but not easy to design) the best you can do is to check the native symbols for NULL pointers on usage and then re-fetch - that's something that could be done reasonably easily, although it's still a hack ... > > > > > > On Mon, Jan 9, 2012 at 12:47 AM, Jeroen Ooms <jeroen.o...@stat.ucla.edu> > wrote: >> >> I use recordPlot() to save plots to disk that I render later to a >> variety of formats. This works fine for base R plots and ggplot2 >> plots, and also used to work for lattice plots. However somewhere in >> version 2.14 things stopped working for lattice plots. Here is an >> example: >> >> library(lattice); >> histogram(rnorm(100)); >> x <- recordPlot(); >> saveRDS(x, "myplot.rds"); >> y <- readRDS("myplot.rds"); >> print(y); >> Error: NULL value passed as symbol address >> >> printing x works fine, but printing y either gives an error or prints >> an empty page. The problem seems to be related to serializing the >> recordedplot object, which contains a lot of memory pointers. Any tips >> or workarounds? >> >>> sessionInfo() >> R version 2.14.1 (2011-12-22) >> Platform: i686-pc-linux-gnu (32-bit) >> >> locale: >> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C >> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 >> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 >> [7] LC_PAPER=C LC_NAME=C >> [9] LC_ADDRESS=C LC_TELEPHONE=C >> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C >> >> attached base packages: >> [1] stats graphics grDevices utils datasets methods base >> >> other attached packages: >> [1] lattice_0.20-0 >> >> loaded via a namespace (and not attached): >> [1] grid_2.14.1 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel