我有一个列表,Z
,其中每个Z[[i]]
是一个ffdf
对象。ffdf对象列表的序列化
我的问题是如何将Z
保存到磁盘以供将来的会话使用,可能使用的内容如save.ffdf
。
Z <- list()
for(i in 1:10) {
Z[[i]] <- as.ffdf(data.frame(array(1,dim=c(2,10))))
}
is(Z[[1]])
is(Z)
我有一个列表,Z
,其中每个Z[[i]]
是一个ffdf
对象。ffdf对象列表的序列化
我的问题是如何将Z
保存到磁盘以供将来的会话使用,可能使用的内容如save.ffdf
。
Z <- list()
for(i in 1:10) {
Z[[i]] <- as.ffdf(data.frame(array(1,dim=c(2,10))))
}
is(Z[[1]])
is(Z)
您可以使用ffsave()
保存对象的列表,但它预计,在当前的环境下得到解决的名单。但是,您可以编写自己的帮助函数,将列表中的每个对象(df)放入一个变量中,并使用ffsave来保存这些对象。事情是这样的:
saveList <- function(lst, fname) {
outlist = c()
for (i in 1:length(lst)) {
name = paste0('out_',i)
outlist = c(outlist, name)
assign(name, lst[[i]])
}
ffsave(list=outlist, file=fname)
}
当加载该文件与ffload()
你会得到一堆对象的名称OUT_1,输出2插孔的,...在当前的环境。你可能不希望这样,所以你需要另一个辅助函数来把东西放回列表:
loadList <- function(fname) {
ffload(fname)
objs = ls(pattern="out")
outlist = list()
for (o in objs) {
idx= as.integer(strsplit(o,"_")[[1]][2])
outlist[[idx]] = get(o)
}
outlist
}
注:源代码必须修改/扩展如果要改为使用的数字名称索引值。
为什么不简单地使用'save(Z,file =“Z.Rdata”)'......当我尝试它时工作正常?! – holzben
@holzbrn因为ff文件保存在临时目录中并将被清除。在你重新加载''Z.Rdata''之后,尝试输入'Z [[1]]',你会得到一些东西,比如'打开C:/ Users /..../ AppData/Local/Temp/RtmpO47OSM/ffdf5645baa5ac8.ff'。 – Jase
啊,好的!我刚刚重新开始会话,而不是电脑!对不起。 – holzben