基于文档:
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”这个词永远不会出现。
你有什么看法?我错过了什么吗?或者是提交实际错误的情况?答案 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