ffdf对象列表的序列化

Posted

技术标签:

【中文标题】ffdf对象列表的序列化【英文标题】:Serialization for a list of ffdf objects 【发布时间】:2013-08-27 06:21:13 【问题描述】:

我有一个列表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)

【问题讨论】:

为什么不简单地使用save(Z, file="Z.Rdata")...我试过后效果很好?! @holzbrn 因为 ff 文件保存在临时目录中并将被删除。在你重新load Z.Rdata 尝试输入Z[[1]] 后,你会得到opening ff C:/Users/..../AppData/Local/Temp/RtmpO47OSM/ffdf5645baa5ac8.ff 之类的东西。 啊,好的!我只是重新启动会话,而不是计算机!对不起.. 【参考方案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

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

【讨论】:

使用saveList时出现错误Error in system(cmd, input = filelist, intern = TRUE) : 'zip' not found 这是ffsave()的问题;它使用zip 压缩其文件。如果您的路径上没有zip,则会出现此错误。 你所说的“zip on your path”是什么意思? zip 是用于创建 ZIP 文件的命令行工具。为了让 ff 使用它,它必须安装在搜索路径(PATH 环境变量)中的目录中。我认为 Windows 的正确版本的 zip 可以在这里下载:info-zip.org 但我可能是错的(我使用的是 Linux ......)。如果您需要更多说明,请搜索“ffsave zip windows”,您会发现有同样问题的人(+ 解决方案......我认为......) 我现在使用 saveList 函数收到以下错误:[99] "C:/Users/Username/AppData/Local/Temp/RtmpiWcDBa/ffdf17385057488.ff" [100] "C:/Users/Username/AppData/Local/Temp/RtmpiWcDBa/ffdf173865264183.ff" Error in ffsave(list = outlist, file = fname, rootpath = "C://RTools//bin") : the previous files do not match the rootpath (case sensitive)

以上是关于ffdf对象列表的序列化的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jackson 反序列化对象列表

保存对象列表返回无法反序列化错误

C# 使用对象列表中的对象反序列化 JSON - 但无法访问它

自定义可序列化对象数组列表的意图错误

列表的 Protobuf.net 对象图序列化

如何将 xml 对象反序列化回类列表