我对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'
问题是我正在处理很多大文件而且我不想创建副本!我该怎么办?
答案 0 :(得分:0)
对于您的案例
,可能会对ffload
做出解释
〜/ Documents / Data目录中有2个文件。一个叫Object
,另一个叫Object.ffData
。 Object.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
。这不会压缩您的数据,而是将其保存在磁盘上。