R中的ff包:如何将数据从一个驱动器移动到另一个驱动器,并更改文件名

Mig*_*azq 3 r ff

我正在与令人惊叹的ff和ffbase包密切合作.由于一些技术细节,我必须使用我的R会话在我的C:驱动器中工作.完成后,我将生成的文件移动到我的P:驱动器(在Windows中使用剪切/粘贴,而不是使用ff).

问题是当我加载ffdf对象时:

load.ffdf("data") 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Error: file.access(filename, 0) == 0 is not TRUE
Run Code Online (Sandbox Code Playgroud)

这没关系,因为没有人告诉ffdf对象它被移动了,但是尝试:

filename(data$x) <- "path/data_ff/x.ff"
Run Code Online (Sandbox Code Playgroud)

要么

pattern(data) <- "./data_ff/"
Run Code Online (Sandbox Code Playgroud)

没有帮助,给出错误:

Error in `filename<-.ff`(`*tmp*`, value = filename) : 
ff file rename from 'C:/DATA/data_ff/id.ff' to 'P:/DATA_C/data_ff/e84282d4fb8.ff' failed. 
Run Code Online (Sandbox Code Playgroud)

有没有办法"改变"到ffdf对象文件新位置的路径?谢谢 !!

Jan*_*aan 5

如果您想在之后"更正"您的文件名,您可以使用:

physical(x)$filename <- "newfilename"
Run Code Online (Sandbox Code Playgroud)

例如:

> a <- ff(1:20, vmode="integer", filename="./a.ff")
> saveRDS(a, "a.RDS")
> rm(a)
> file.rename("./a.ff", "./b.ff")
[1] TRUE
> b <- readRDS("a.RDS")
> b
ff (deleted) integer length=20 (20)
> physical(b)$filename <- "./b.ff"
> b[]
opening ff ./b.ff
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
Run Code Online (Sandbox Code Playgroud)

使用filename()本公司第一届当然会一直更容易.您还可以查看包中的save.ffdf相应load.ffdf功能,ffbase这样可以更简单.

加成

要重命名a中所有列的文件名,ffdf可以使用以下函数:

redir <- function(ff, newdir) {
  for (x in physical(b)) {
    fn <- basename(filename(x))
    physical(x)$filename <- file.path(newdir, fn)
  }
  return (ff)
}
Run Code Online (Sandbox Code Playgroud)