序列化ffdf对象列表

时间:2013-08-27 06:21:13

标签: r serialization memory-management bigdata

我有一个列表Z,其中每个Z[[i]]都是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)

1 个答案:

答案 0 :(得分:1)

您可以使用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,out_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
}

注意:如果要使用名称而不是数字索引值,则必须修改/扩展源代码。