0

我对 ff 包中的函数属性有疑问。我要加载的特定目录中有一个 ff 对象。这就是我正在使用的:

setwd(~/Documents/Data)
ffload("Object", overwrite=TRUE)

使用 OVERWRITE=TRUE,对象的副本将保存在 tmp 文件夹中,并且将从该目录加载对象:

[1] "tmp/Rtmpsj1b2f/clone11876c2c0949.ff"

但是,如果您不想要对象的副本,则需要将 FALSE 覆盖。如果这是您第一次加载 ff 对象,即使 overwrite=FALSE,它也会在 tmp 文件夹中创建一个副本!然后我删除了副本,第二次重新加载了对象,我有以下消息并且没有副本:

Warning :
In FUN("Obs_zone_212_19700801_19750731"[[1L]], ...) :
did not overwrite object 'Obs_zone_212_19700801_19750731'

问题是我正在处理很多大文件,我不想创建副本!我能做些什么 ?

4

1 回答 1

0

也许最好ffload为你的情况做一个解释

您的 ~/Documents/Data 目录中有 2 个文件。一个叫Object,另一个叫Object.ffData包含带有原始数据Object.ffData的 ff 文件。包含具有 ff 文件的虚拟属性的 R 工作区(例如级别,例如指向 ff 文件的指针,...),根据您的数据结构,它只有几 Kb。Object

ffload 将包含在其中的 ff 文件解压缩Object.ffData到您创建 ff 文件的文件夹中(请参阅getOption("fftempdir")- 对于您的情况,这是在 tmp/Rtmpsj1b2f 文件夹中。如果您指定rootpathffload 的参数,您可以将 ff 文件解压缩到另一个目录。如ffload("Object", overwrite=TRUE, rootpath = "/home/myname/myfolder").ffload 的 overwrite 参数表示如果您要解压的那个 ff 文件已经存在于该目录中,它将覆盖它。到目前为止 ff 部分。

使用 ffload 加载文件时,您也在 R 会话中加载虚拟部分。对于您的情况,这是您命名的对象Obs_zone_212_19700801_19750731(请参阅 参考资料ls())。您看到的警告是,在加载新数据时,它没有覆盖此对象。所以你需要rm(Obs_zone_212_19700801_19750731)在 ffloading 之前摆脱警告。

希望这可以帮助。如果您的数据是 ffdf 对象,您也可以查看save.ffdffrom package ffbase。这不会压缩您的数据,而是将其直接保存在磁盘上。

于 2014-01-21T14:35:44.980 回答