我正在与令人惊叹的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对象文件新位置的路径?谢谢 !!
如果您想在之后"更正"您的文件名,您可以使用:
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)