类似于https://stackoverflow.com/a/10268255/,当使用file.copy
时,我想要一个自动创建子目录的函数。当前我遇到了错误:
In file.copy( ... :
'recursive' will be ignored as 'to' is not a single existing directory
不幸的是使用了像这样的函数:
my.file.copy<- function(from, to, ...) {
todir <- dirname(to)
if (!isTRUE(file.info(todir)$isdir)) dir.create(todir, recursive=TRUE)
file.copy(from = from, to = to, ...)
}
不起作用,因为dirname
是目录,则to
会剥离最后一个子目录。
答案 0 :(得分:1)
根据您将如何向函数传递to
参数,我们可以使用其中一种。
1)如果要仅使用目录名称传递to
,并且希望它使用from
参数中的文件名,则可以使用以下函数
my.file.copy_dir <- function(from, to, ...) {
if (!dir.exists(to)) dir.create(to, recursive = TRUE)
file.copy(from = from, to = paste0(to, basename(from)), ...)
}
2)如果您要将to
作为新文件名的完整路径传递,我们可以使用
my.file.copy_file <- function(from, to, ...) {
if (!dir.exists(dirname(to))) dir.create(dirname(to), recursive = TRUE)
file.copy(from = from, to = to, ...)
}
并将它们用作:
my.file.copy_dir("/path/of/file/report.pdf", "/new/path/of/file/")
和
my.file.copy_file("/path/of/file/report.pdf", "/new/path/of/file/abc.pdf")