【问题标题】:In R, what is the difference between unlink and file.remove?在 R 中,unlink 和 file.remove 有什么区别?
【发布时间】:2012-03-27 11:46:04
【问题描述】:

R 提供了两个函数来从文件系统中删除文件(和文件夹):

  • unlink
  • file.remove

除了unlink 需要一些额外的参数之外,它们的区别是什么,或者何时使用哪个并不完全明显。

阅读这些函数的源代码并没有多大帮助,因为它们都只是调用编译后的 C 函数。

有什么区别?什么时候应该使用unlink 而不是file.remove,反之亦然?

【问题讨论】:

  • 你可以在这里找到实现:svn.r-project.org/R/trunk/src/main/platform.c
  • unlink 会删除目录,但file.remove 只会删除空目录,Windows 上不会
  • 仅供参考:在 R 新闻中,版本 2.15.0 中的更改:“指向目录的符号链接的 unlink(recursive = TRUE) 行为已更改:它现在删除链接而不是目录内容(就像 rm -r 一样)。”

标签: r


【解决方案1】:

我的猜测只是 unlink 出现在 S 中,因为它引用 Becker、Chambers 和 Wilks (1988),而 file.remove(和 file.copy、file.create 等)是 R 的一部分从早期开始,为了提供一系列用于一般文件操作的函数。

unlink 对应一个非常古老的 Unix 函数(在 1988 年版本的 S 出现时肯定存在):http://en.wikipedia.org/wiki/Unlink_(Unix)

所以,unlink 是为了与 S 兼容,file.remove 作为 R 的一部分存在,并且两者都被维护以支持来自 S 和 R 的长期现有代码。除此之外,只需选择适合的代码你的需求(或习惯)最好。

【讨论】:

    【解决方案2】:

    我认为函数行为的主要实际区别在于它们如何处理当前打开的文件,因此不能立即删除:

    • unlink() 在文件未在任何其他上下文中打开时将其标记为删除;
    • file.remove() 保持文件不变,返回 FALSE,但引发警告。

    相关:how to remove the file when "permisson denied" in R?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-10
      • 2010-11-19
      • 1970-01-01
      • 2013-04-08
      • 2011-08-12
      • 2021-02-23
      • 2011-04-28
      • 2011-04-18
      相关资源
      最近更新 更多