不使用ffload创建副本

时间:2014-01-21 14:10:42

标签: r copy bigdata ffbase

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

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

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

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

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

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

问题是我正在处理很多大文件而且我不想创建副本!我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于您的案例

,可能会对ffload做出解释

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

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

使用ffload加载文件时,您还在R会话中加载虚拟部分。这是一个您命名为Obs_zone_212_19700801_19750731的对象(请参阅ls())。您看到的警告是,当ffloading您的新数据时,它没有覆盖此对象。因此,在ffloading之前你需要rm(Obs_zone_212_19700801_19750731)来摆脱警告。

希望这会有所帮助。 如果您的数据是ffdf对象,您还可以查看包save.ffdf中的ffbase。这不会压缩您的数据,而是将其保存在磁盘上。