使用load.ffdf将ff / ffbase文件加载到R会话中

时间:2013-10-02 07:53:02

标签: r ffbase

我有一个大的ffdf数据框保存到磁盘,我需要将其加载到新的R会话中。当我在文件所在的目录中运行load.ffdf时,出现以下错误消息:

load.ffdf("./ffdb")
#    Error in `filename<-.ff`(`*tmp*`, value = "./custTrans$custKey.ff") : 
#    ff file rename from './custTrans$custKey.ff' to
#    'mylocation'/ffdb/custTrans$custKey.ff' failed

我真的想读这些文件。有没有办法鼓励他们阅读?有没有办法直接读取单个ff列文件?他们的格式是什么?也许我可以将它们手动放在底层ff包使用的临时位置?

我已经查看了save.ffdfload.ffdf函数,但这并没有给我任何简单的修复。

Backgroud:我最初将数据框custTrans保存到默认的./ffdb目录。我实际上想在目录./custTrans中使用它们,所以我使用move.ffdf来移动文件。已移动列文件,但未移动.RData.Rprofile文件。我尝试从./ffdb目录加载数据,并将.RData.Rprofile文件复制到./custTrans目录并在那里运行load.ffdf。我还尝试将数据文件移回./ffdb目录。错误消息是相同的。

1 个答案:

答案 0 :(得分:0)

我找到了问题的部分解决方案。我现在可以使用ff读取原始readBin文件。由于我的ffdf 已加载到搜索路径中,因此我可以使用它来查看列中的特定数据类型以及列长度。打印对象可以获得信息。

custTrans

然后readBin根据上面打印的信息设置whatn,将会读取文件。然后可以使用标准方法将它们组合回ffdf

custKey <- readBin("./custTrans/MINS$custKey.ff", what = "int", n = 268820)
Transactiondate.max <- readBin("./custTrans/MINS$Transactiondate.max.ff",
                               what = "double", n = 268820)
Transactiondate.min <- readBin("./custTrans/MINS$Transactiondate.min.ff",
                               what = "double", n = 268820)
custTrans <- as.ffdf(as.ff(custKey),
                     as.ff(Transactiondate.max),
                     as.ff(Transactiondate.min))

这显然假设所有这些都适合记忆,它确实如此。 (这不是文件大小的问题,但生成它们需要很长时间。)