如何删除R中的目录?

fed*_*qui 48 directory r

经过一些研究,我发现以下工作:

unlink("mydir")
Run Code Online (Sandbox Code Playgroud)

recursive如果要以递归方式删除,则必须使用该选项:

unlink("mydir", recursive=TRUE)
Run Code Online (Sandbox Code Playgroud)

但是,我注意到unlink("mydir"),如果没有recursive选项,单独mydir包含子目录时不会产生任何输出:它不会删除目录但不显示任何警告.根本不值一提:

> list.dirs()
[1] "."          "./r"
> dir.create("test")
> dir.create("test/test2")
> list.dirs()
[1] "."            "./r"   "./test"       "./test/test2"
> unlink("test")          ######### here I would expect a warning #########
> list.dirs()
[1] "."            "./r"   "./test"       "./test/test2"
> unlink("test", recursive=TRUE)
> list.dirs()
[1] "."          "./r"
Run Code Online (Sandbox Code Playgroud)

有没有办法得到任何类型的"通知",就像你在UNIX系统中得到的那样?

$ rmdir test
rmdir: failed to remove «test»: Directory not empty
Run Code Online (Sandbox Code Playgroud)

我使用R版本3.1.2(2014-10-31).我试过玩options(warn=1)等但没有运气.

zw3*_*324 37

见帮助?unlink:

0表示成功,1表示失败,无形.不删除不存在的文件不是失败,如果递归= FALSE也不能删除目录.但是,x中的缺失值被视为失败.

在有文件夹foounlink情况下,recursive=TRUE不会返回呼叫1.

请注意,实际上行为更像是rm -f,这意味着取消链接不存在的文件将返回0.

  • 有趣...我刚刚尝试过:有效地`> print(unlink("test"))` 返回`[1] 1` 和`> print(unlink("test", recursive=TRUE))` 返回`[1] ] 0` 因为它成功了。那么这意味着知道删除是否有效的唯一方法是通过捕获 `unlink` 命令的返回码......我理解它,但看起来有点违反直觉。 (2认同)
  • 只是为了明确一点:要删除文件夹,您**必须**传递“recursive = TRUE”(请参阅​​“unlink”的帮助:*如果 recursive = FALSE 目录不会被删除,甚至不会删除空目录。*)。 (2认同)

hrb*_*str 6

如果你真的需要看错误信息,这里有一个包装函数:

.unlink <- function(x, recursive = FALSE, force = FALSE) {
  if (unlink(x, recursive, force) == 0)
    return(invisible(TRUE))
  stop(sprintf("Failed to remove [%s]", x))
}
Run Code Online (Sandbox Code Playgroud)


use*_*745 5

简单地

unlink("mydir", recursive = TRUE) # will delete directory called 'mydir'
Run Code Online (Sandbox Code Playgroud)