在R语言中,unlink和file.remove有什么区别?

42

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

  • unlink
  • file.remove

并不完全清楚它们之间的差异,或者在什么情况下使用哪个函数,除了unlink需要一些其他参数。

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

unlinkfile.remove 有什么区别?何时应该优先使用 unlink,或者反过来呢?


你可以在这里找到实现代码:http://svn.r-project.org/R/trunk/src/main/platform.c - kohske
10
unlink 函数可以删除目录,但是 file.remove 函数只能删除空目录,而且在 Windows 系统上无法使用。 - James
8
FYI:在 R 语言的新闻中,版本 2.15.0 中的变化是:“针对指向目录的符号链接,unlink(recursive = TRUE) 的行为已更改:它现在会删除链接本身而非目录内容(就像 rm -r 命令一样)。" - GSee
2个回答

30

我的猜测是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的长期现有代码。除此之外,只需选择最适合您需要(或习惯)的一个即可。


7

这些函数的主要实际差异在于它们如何处理当前已打开的文件,因此无法立即删除:

  • unlink() 将文件标记为在任何其他上下文中都未打开时立即删除;
  • file.remove() 保留文件不变,返回 FALSE ,但会抛出警告。

相关:如何在R中处理“权限被拒绝”时删除文件?


1
unlink 允许使用“globbed”文件名,而 file.remove() 似乎不允许。 - Stuart R. Jefferys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接