0

根据文档:

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)假设您对排除隐藏/系统文件不感兴趣,可能会部分有用。但这仅适用于交互式使用。 总是添加两个名为and的dir (all.files = TRUE)假文件(好吧,总是除了 root)。这意味着像这样用于检查目录是否为空的行在 Windows 上不起作用:...

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

这种行为是设计实现的吗?

有人可能会回答,因为 Rdir()以这种方式复制了 Windows shell 命令dir。恕我直言,外壳dir主要不是用于批量使用;而 R 命令应该用于编程任务。无论如何,为什么这种复制行为只在 何时显示all.files = TRUE

可以肯定的是,R 编码人员总是非常友好地详细说明文档中不同操作系统之间的差异,而在这种情况下( http://stat.ethz.ch/R-manual/R-patched/library/base /html/list.files.html)单词“Windows”永远不会出现。

你有什么意见?我错过了什么吗?还是提交实际错误的情况?

4

2 回答 2

1

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

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

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

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

file.info('New folder')$size == 0
于 2013-01-17T15:37:33.967 回答
1

这 ”。” 并且“..”是包含目录和“根”的占位符。如果您这样做,它们代表您在 Windows 命令行中将获得的结果:

 cd .
 cd ..

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

于 2013-01-17T15:28:04.003 回答