目前,我使用save()
这样将数据表转换为rda格式
save(data_table,file="data.rda")
但我不想写入磁盘来获取变量的.rda格式。 相反,我想将输出(rda字节)直接写入变量。
如果是其他编程语言,那就像
从
切换FileStream fs = new FileStream("data.rda","w")
Save(data_table,fs)
到
byte[] buffer = new byte[data_table.getBytes()]
Save(data_table,buffer);
有没有办法在R中做这样的事情?
答案 0 :(得分:4)
这可以通过原始连接
实现rc <- rawConnection(raw(0),"wb")
save(iris,file=rc)
v1 <- rawConnectionValue(rc)
close(rc)
head(v1,80)
#> [1] 52 44 58 32 0a 58 0a 00 00 00 02 00 03 01 01 00 02 03 00 00
#> [21] 00 04 02 00 00 00 01 00 04 00 09 00 00 00 04 69 72 69 73 00
#> [41] 00 03 13 00 00 00 05 00 00 00 0e 00 00 00 96 40 14 66 66 66
#> [61] 66 66 66 40 13 99 99 99 99 99 9a 40 12 cc cc cc cc cc cd 40
比较写入临时文件并回读
save(iris,file="temp.rda",compress=FALSE)
v2 = readBin("temp.rda", raw(), file.info("temp.rda")[1,"size"])
identical(v1,v2)
#> [1] TRUE
请注意,默认情况下写入文件使用压缩,默认情况下不写入原始连接,因此compress=FALSE
参数。
另请参阅serialize
,这可能更合适,具体取决于您的目的
v3 <- serialize(iris,NULL)
请注意identical(v1,v3)==FALSE
。实际上,v3
与使用saveRDS
代替上面的save
完全相同。编码/内容类似
head(v3,80)
#> [1] 58 0a 00 00 00 02 00 03 01 01 00 02 03 00 00 00 03 13 00 00
#> [21] 00 05 00 00 00 0e 00 00 00 96 40 14 66 66 66 66 66 66 40 13
#> [41] 99 99 99 99 99 9a 40 12 cc cc cc cc cc cd 40 12 66 66 66 66
#> [61] 66 66 40 14 00 00 00 00 00 00 40 15 99 99 99 99 99 9a 40 12
很容易恢复数据
identical(unserialize(v3),iris)
#> [1] TRUE