在R中将文件列表从一个文件夹复制到另一个文件夹

17

我正在尝试在R中批量移动不同类型的文件。

origindir <- c("c:/origindir")
targetdir <- c("c/targetdir")
filestocopy <- c("myfile.doc", "myfile.rda", "myfile.xls", 
                 "myfile.txt", "myfile.pdf", "myfile.R")

我尝试了以下内容,但不知道如何对所有文件执行:

file.copy(paste (origindir, "myfile.doc", sep = "/"), 
          paste (targetdir, "myfile.doc", sep = "/"), 
          overwrite = recursive, recursive = FALSE, 
          copy.mode = TRUE)

我不知道该怎么做。


1
使用lapply迭代你的filestocopy向量,创建一个匿名函数在你的lapply调用中,以替换所有你有myfile.doc的地方...类似于lapply(filestocopy, function(x) file.copy(paste(origindir, x, sep = "/"), ... - Chase
6
另外,看看file.path()是否可以替代上面的paste,它应该比paste更快,并且在R内部广泛使用。 - Chase
7
我认为file.copy函数中的fromto参数实际上是矢量化的。 - joran
@joran - 酷!如果是这样的话,那应该很简单,只需要用filestocopy替换myfile.doc就可以了...对吧? - Chase
当使用lapply()函数时,Chase的示例在控制台中返回一个包含TRUE语句的列表。这个结果能否被抑制? - Toby
显示剩余2条评论
2个回答

19

正如Joran和Chase在评论中已经指出的那样,你需要做的只有:

file.copy(from=filestocopy, to=targetdir, 
          overwrite = recursive, recursive = FALSE, 
          copy.mode = TRUE)

然后,如果你实际上是在移动文件,请使用以下命令删除原文件:

file.remove(filestocopy)

3
我收到了这条消息:“Error in file.copy(from = filestocopy, to = targetdir, overwrite = recursive, : object 'recursive' not found”。递归不是内置函数吗? - Y. Z.
1
我曾经遇到过同样的错误。但是以下代码对我有效:flist <- list.files(filestocopy, ".csv", full.names = TRUE); file.copy(flist, targetdir) - Tanjil
你需要使用 overwrite = TRUE 而不是 overwrite = recursive。这样就可以解决错误了。 - ndem763

1

只是在扩展Chase的建议。

lapply(filestocopy, function(x) file.copy(paste (origindir, x , sep = "/"),  
          paste (targetdir,x, sep = "/"), recursive = FALSE,  copy.mode = TRUE))

3
我不知道为什么你要使用这个,因为默认的file.copy能够处理一个文件名向量。 - A5C1D2H2I1M1N2O1R2T1
由于某种未知原因,Error in file.copy(from = TBL$FROM, to = TBL$TO[1]) : more 'from' files than 'to' filesTBL是一个tibble。 - Stat-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接