如何删除 R 中的目录?

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

unlink("mydir")

你必须使用 recursive选项,如果你想递归删除:

unlink("mydir", recursive=TRUE)

但是,我注意到,当 mydir包含子目录时,没有 recursive选项的 unlink("mydir")本身不会产生任何输出: 它不会删除 dir,但不会显示任何警告。什么都没有:

> 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"

有没有办法获得任何类型的“通知”,就像您在 UNIX 系统中获得的那样?

$ rmdir test
rmdir: failed to remove «test»: Directory not empty

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

62092 次浏览

请看帮助 ?unlink:

价值

0表示成功,1表示失败,不可见。不删除不存在的 文件不是故障,也不是无法删除目录,如果 然而,x 中缺少的值被认为是 失败。

在有一个文件夹 foo的情况下,没有 recursive=TRUEunlink调用将返回 1

注意,实际上这种行为更像 rm -f,这意味着解除不存在的文件的链接将返回0。

如果你需要看到一个错误,这里有一个包装函式:

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

对于那些无意中发现这个问题的人,我通常会在这里使用“ shell”命令来完全删除文件夹。

如果文件夹不是空的,使用“ system”将打印出127错误。

下面是一个简单的核心选项——完全删除文件夹(不要问问题) :

Loc <- "C:/file has spaces/hence the form below/"
shell( glue::glue("rmdir /s /q \"{Loc}\" ") )

很简单

unlink("mydir", recursive = TRUE) # will delete directory called 'mydir'