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)隠しファイルやシステム ファイルを除外することに関心がない場合は、部分的に役立つ可能性があります。ただし、これはインタラクティブな使用にのみ当てはまります。 常にanddir (all.files = TRUE)という名前の 2 つの偽のファイルを追加します(ルート以外は常に)。これは、ディレクトリが空であることを確認する次のような行は、Windows では機能しないことを意味します。...

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

この動作は設計によって実装されていますか?

Rdir()はこのように Windows シェル コマンドを複製するので、そうであると答える人もいるかもしれませんdir。IMHO シェルdirは、主にバッチでの使用を意図したものではありません。一方、R コマンドはプログラミング タスクを対象とする必要があります。とにかく、この複製動作が次の場合にのみ表示されるのはなぜall.files = TRUEですか?

1 つ確かなことは、R のコーダーは、ドキュメントのさまざまな OS の違いを詳しく説明するのにいつもとても親切であるということです 。 /html/list.files.html ) 「Windows」という単語は表示されません。

あなたの意見は何ですか?何か不足していますか?それとも、実際のバグを提出する場合ですか?

4

2 に答える 2

1

「。」および「..」は、含まれているディレクトリと「ルート」のプレースホルダーです。これらは、Windows コマンド ラインで実行した場合に得られるものを表しています。

 cd .
 cd ..

ヘルプ ファイルは、R が OS から返されたものを表示していることを明確に示しています。おそらく、Windows のドキュメントも確認する必要があります。Windows の「dir」コマンドのドキュメントから始めます。

于 2013-01-17T15:28:04.003 に答える
1

@antonio説明をありがとう。ドキュメントの「可視」という用語は、Windows 属性の意味で「非表示」ではないファイルではなく、ピリオドで始まらないファイルを指すようです。どうやら、dirR で呼び出すことは、Windows コマンド ラインから呼び出すことと同じではありません。

ただし、これは実際には問題ではありません。Windows dir を直接呼び出して、必要な動作を取得できるためです。

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

または、単にディレクトリが空かどうかを簡単に判断できるようにすることが目的の場合は、次を使用できます。

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