我在base64编码的字符串中有R对象(保存为.rds文件):
encoded <- "H4sIAAAAAAAABoVQywrCMBBc8zi0ICiCPyHme7yVrU0hkEZIA/XofwvWTUwQc/Ewy2SyOzvJpQUABpwxYJwoP1DZEHYECQKaeD5nwnHqa+1LTgCCpfGPIB1Oes5eReSD8VVf42+LKr3bmOdBZV3XZ214tTgXQ5bFdsCAKmBv9Y8yenKsDPbKuKC9Q6tmbUevRxKPGa+MP2mlcYO+0/6YFOrLrksT6RkyI36nSInJsCx6A7sXoh15AQAA"
我需要在R中加载此对象。按照这个问题(&#34; Base64 encoding a .Rda file&#34;),我得到了以下代码:
library("base64enc")
conb64 <- file('obj.b64', 'w+b')
write(encoded, conb64);
close(conb64)
base64decode(file='obj.b64', output = 'obj.rds')
myobj <- readRDS('obj.rds')
这很好但我想最小化代码并理想地管理而不创建像myobj <- readRDS(base64decode(encoded))
这样的磁盘文件。有没有办法删除至少一些操作?
对我来说,base64enc
包中存在一个错误。可以通过简单的执行来复制base64decode(what='anything', output = 'any.name')
- 给出错误:
base64decode出错(what =&#34; any&#34;,output =&#34; any.name&#34;):
论证&#34;文件&#34;缺少,没有默认
显然是因为base64decode()
使用file
作为参数,但也调用file()
函数。当我更改函数的源代码(将file
替换为filename
)时,一切正常,代码decoded <- base64decode(encoded, what = 'raw')
提供了正确的二进制rds文件。虽然错误未得到纠正,但可以使用caTools
包中相同名称的功能:decoded <- base64decode(z = encoded, what = 'raw')
。但是,我无法将其提供给readRDS()
函数:
library('caTools')
decoded <- base64decode(encoded, what = 'raw')
con1 <- rawConnection(object = dec, open = 'rb')
myobj <- readRDS(con1)
# Error in readRDS(con1) : unknown input format