dir(all.files = FALSE)和可见文件

时间:2013-01-17 15:00:43

标签: r

基于文档:

dir(path = ".", pattern = NULL, all.files = FALSE,
    full.names = FALSE, recursive = FALSE,
    ignore.case = FALSE, include.dirs = FALSE)


all.files: a logical value.  If 'FALSE', only the names of visible
          files are returned.  If 'TRUE', all file names will be
          returned.

实际上,至少在Win7 x64上,有:

dir(all.files = FALSE)  

我还列出了attrib设置为:

的文件
_HSA_________ 

使用:

dir (all.files = TRUE)  

无意义的目录占位符

[1] "."            ".."    

你呢?

更新:解决方案,设计策略或错误?

经过一些进一步的调查,我可以提供一些(希望)有用的见解。 正如你们许多人所知,在Linux中,以“点”开头的文件被认为是隐藏的,而在Windows中则不是这种情况,它基于属性。 (dir()函数)R遵循Linux惯例。在Windows上,这可能会导致许多问题。

如果您发出标准dir(),即如果您查询可见文件,您也会得到隐藏文件,更严重的是,您可能无法获取可见文件,只是因为它们以无辜的点开头,在Windows中没有特别的意义。 这意味着在Windows中,标准dir()根本没用,除非您在可确定没有点文件的受控环境中操作。

dir (all.files = TRUE)可能部分有用,假设您对排除隐藏/系统文件不感兴趣。但这仅适用于交互式使用。 dir (all.files = TRUE)总是添加两个名为...的假文件(嗯,除了root之外)。这意味着像这样的行来检查目录空白,在Windows上不起作用:

 if (length(dir(all.files = TRUE))==0) cat('I am empty\n') 

此行为是否由设计实现?

有人可能会回答,因为R dir()以这种方式复制Windows shell命令dir。 IMHO shell dir主要不用于批量使用;而R命令应该用于编程任务。 无论如何,为什么这种复制行为仅在all.files = TRUE时出现?

有一点可以肯定的是,R编码员总是如此善于详细说明文件中不同操作系统之间的差异,而在这种情况下( http://stat.ethz.ch/R-manual/R-patched/library/base/html/list.files.html)“Windows”这个词永远不会出现。

你有什么看法?我错过了什么吗?或者是提交实际错误的情况?

2 个答案:

答案 0 :(得分:1)

"。"和#34; .."是包含目录和" root"的占位符。它们表示如果您执行以下操作将在Windows命令行中获得的内容:

 cd .
 cd ..

帮助文件清楚地表明R正在显示操作系统返回的内容。也许您还应该查看Windows文档。我将从Windows" dir"的文档开始。命令。

答案 1 :(得分:1)

@antonio感谢您的澄清。文档中的术语“可见”似乎是指不是以句点开头的文件,而不是从Windows attrib意义上来说不是“隐藏”的文件。显然,在R中调用dir与从Windows命令行调用它是不同的。

这确实不是问题,因为你可以直接调用Windows目录来获得你想要的行为:

shell('dir /b', intern=TRUE)

或者,如果您的目标只是为了能够轻松确定目录是否为空,则可以使用:

file.info('New folder')$size == 0