如何删除R中的目录?

时间:2015-01-22 19:24:39

标签: r directory

经过一番研究后,我发现以下情况有效:

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"

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

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

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

4 个答案:

答案 0 :(得分:32)

请参阅帮助?unlink

  

     

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

如果文件夹为foo,则不unlink的{​​{1}}来电将返回recursive=TRUE

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

对于那些绊脚石的人,我通常会在这里使用系统命令。

取消链接将删除文件夹内容-但保留根文件夹本身。

以下是最简单的核选项-完全删除文件夹(这通常是我所需要的)-写成便于您轻松查看组件:

Loc <- "mydir"
system(paste0("rm -r ", Loc))

答案 3 :(得分:0)

简单

*Filesystem> splitOnWhitespace "a1"
["a1"]
*Filesystem> splitOnWhitespace "a1 a2"
["a1","a2"]
*Filesystem> splitOnWhitespace "a1 a2 a3"
*** Exception: src/Filesystem.hs:(271,1)-(275,24): Non-exhaustive patterns in function concatOnBackslash

*Filesystem> splitOnWhitespace "a1 a2 a3 a4"
*** Exception: src/Filesystem.hs:(271,1)-(275,24): Non-exhaustive patterns in function concatOnBackslash