R:为什么fs :: dir_copy有时会失败?

问题描述 投票:0回答:1

[在执行过程中,我需要使用fs::dir_copy(currentPath, newPath)复制目录。有时,我会收到以下错误消息:

Error in link_copy(links, path(new_path[[i]], path_rel(links, path[[i]])), : all(is_link(path)) is not TRUE

这仅在某些时间发生,并非总是如此。而且,如果我用目录本身的手动副本替换目录(即手动复制目录,删除原始目录,重命名副本),那么我的代码将起作用。

有人可以解释为什么会这样吗?有没有办法我可以一劳永逸地避免该错误?

r copy
1个回答
0
投票

这不能回答您的问题,但可以帮助您进一步分析发生的情况。 R的一大优点是您可以轻松检查源代码。特别是在出现异常情况的情况下,查看代码可能很有用。

在您的情况下,我们可以检查fs::dir_copy的源代码并追溯到生成错误消息的代码。如果在控制台中键入fs::dir_copy(无括号),则R将打印该函数的R代码(如果该函数不是原始的)。在此执行操作将显示fs:dir_copy函数调用fs::link_copy函数。很有道理,因为错误消息来自此功能。现在,我们可以使用fs::link_copy打印此功能此函数在此行中生成错误消息:

stopifnot(all(is_link(path)))

根据错误消息,我们知道all(is_link(path))返回FALSE。下一步是看fs::is_link功能。在这里,我们看到错误可能来自对setNames函数的调用,这取决于fs::file_info函数:res <- file_info(path)在这里,我们看到setNames的调用条件取决于file_info函数返回的内容:

setNames(!is.na(res$type) & res$type == "symlink", res$path)

[[0]看起来很不寻常,因为setNames将一个对象和一个字符向量作为形式。但是,我不是这些功能的开发人员;-)也许您的计算机上的文件类型存在问题,并且file_info(path)在某些情况下会返回意外的内容。

© www.soinside.com 2019 - 2024. All rights reserved.