如何删除R中的目录?

How to remove a directory in R?

经过一些研究,我发现以下方法有效:

unlink("mydir")

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

unlink("mydir", recursive=TRUE)

但是,我注意到 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"

有没有办法获得任何一种 "notification",就像您在 UNIX 系统中获得的那样?

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

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

查看帮助 ?unlink:

Value

0 for success, 1 for failure, invisibly. Not deleting a non-existent file is not a failure, nor is being unable to delete a directory if recursive = FALSE. However, missing values in x are regarded as failures.

在有文件夹 foo 的情况下,没有 recursive=TRUEunlink 调用将 return 1.

请注意,实际上行为更像 rm -f,这意味着取消链接不存在的文件将 return 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'