我有一個列表,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