Convert a raw vector to an R object

How to convert a raw vector back to an R object without writing to disk? I want to read a base64 data stream and convert it to its representation of an object R. Here is an example - how would I return an lm object from a raw vector?

 ## some rdata -- writes to temp file! mod <- lm(mpg ~ cyl, data=mtcars) f1 <- tempfile() save(mod, file=f1, compress="bzip2") library(base64enc) r1 <- readBin(f1, "raw", n=file.info(f1)[1, "size"]) r2 <- base64decode(base64encode(file(f1, "rb"))) # emulate input base64 identical(r1, r2) ## I can get mod back by writing to file and loading, but how to just ## load from a raw vector? rm(mod) # get rid of mod f2 <- tempfile() writeBin(r2, f2) load(f2) # mod is back 
+7
type-conversion r base64
source share
2 answers

Inside my RcppRedis package, I use the RApiSerialize package (which is based on the basic R code originally borrowed from the Rhpc package) to perform these conversions on the fly:

 R> mod <- lm(mpg ~ cyl, data=mtcars) # your example R> R> library(RApiSerialize) R> modraw <- serializeToRaw(mod) # serialized R> str(modraw) # really just a raw vector now raw [1:6819] 58 0a 00 00 ... R> 

So, at this moment you can do whatever you want with the raw vector. Write it to disk, write it to the database (as is the case with RcppRedis), ....

But it is important that you return your model again:

 R> summary( unserializeFromRaw(modraw) ) Call: lm(formula = mpg ~ cyl, data = mtcars) Residuals: Min 1Q Median 3Q Max -4.981 -2.119 0.222 1.072 7.519 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 37.885 2.074 18.27 < 2e-16 *** cyl -2.876 0.322 -8.92 6.1e-10 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 3.21 on 30 degrees of freedom Multiple R-squared: 0.726, Adjusted R-squared: 0.717 F-statistic: 79.6 on 1 and 30 DF, p-value: 6.11e-10 R> 
+5
source share

For R-level access, use unserialize(serialize(mod, NULL)) to round from the R object to the raw vector and vice versa.

+2
source share

All Articles