【问题标题】:How to remove a directory in R?如何删除R中的目录?
【发布时间】:2015-03-21 17:34:46
【问题描述】:

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

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) 等,但没有运气。

【问题讨论】:

    标签: r directory


    【解决方案1】:

    查看帮助?unlink:

    价值

    0 表示成功,1 表示失败,不可见。不删除不存在的 文件不是失败,也不是无法删除目录,如果 递归=假。但是,x 中的缺失值被视为 失败。

    如果存在文件夹foo,则不带recursive=TRUEunlink 调用将返回1

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

    【讨论】:

    • 有趣...我刚刚尝试过:实际上> print(unlink("test")) 返回[1] 1> print(unlink("test", recursive=TRUE)) 返回[1] 0,因为它成功了。那么这意味着知道删除是否有效的唯一方法是捕获unlink命令的返回码......我理解但看起来有点违反直觉。
    • 只是说清楚:要删除您必须传递recursive = TRUE的文件夹(请参阅unlink的帮助:如果递归= FALSE目录不是删除,甚至没有空的。)。
    【解决方案2】:

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

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

    【讨论】:

    • 您可以在实际功能中将其设为unlink &lt;- 并执行base::unlink,但这似乎是错误的。如果您有需要知道是否删除目录的自动化脚本,那么我只需测试返回值。
    • 非常有趣,谢谢!我只是从 R 开始,所以我需要仔细阅读代码才能完全理解你使用的所有功能:)
    【解决方案3】:

    对于那些磕磕绊绊的人,我通常会在这里使用'shell'命令来完全删除文件夹。

    如果文件夹非空,使用“系统”会打印 127 错误。

    以下是简单的核选项 - 完全删除文件夹(不问任何问题):

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

    【讨论】:

      【解决方案4】:

      简单

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 2022-01-07
        • 2011-06-15
        相关资源
        最近更新 更多