2017-10-26 3 views
2

確かに非常に新鮮な質問ですが、どのようにパターンをlist.dirs関数内に含めるのですか?list.dirsにパターンを含める

例えば、list.filesは

Imagery=list.files(full.names=TRUE, recursive=TRUE, pattern= "*20m*.tif$") 

戻って自分の名前で20メートルを持っているし、拡張として.TIFたすべてのファイルを機能します。

しかし、私はlist.dirs

directories=list.dirs(full.names = TRUE, recursive=TRUE, pattern="R10m") 

に、このロジックを適用しようとすると、私はこのエラーを取得:私はここに何かを明らかに不足しているわけではない

Error in list.dirs(full.names = TRUE, recursive = TRUE, pattern = "R10m") : 
unused argument (pattern = "R10m") 

希望。 私の目標は、 "R10m"という名前のフォルダを持つすべてのディレクトリの完全なパスを取得することです。私は多くのサブディレクトリを持つたくさんのフォルダを持っており、それらのほとんどは同様の構造を持っています。私はこのフォルダを持っている人だけをリストしたいと思いますし、tifであるすべてのファイルをリストしています。私はlist.filesオプションだけで必要なファイルを手に入れることができますが、後で変数としてディレクトリパスとファイル名が必要です。

はお時間を事前にいただきありがとうございます、

敬具、 Davor

+0

'?list.dirs'を参照してください。この関数のパターン引数はありません。おそらく 'grep'に関数を値= TRUEでラップして、おそらくfixed = TRUEにします。 – lmo

答えて

1

つの選択肢:

dirs <- list.dirs() 
dirs <- dirs[ grepl(your_pattern, dirs) ] 

または

files <- list.files(pattern = your_pattern, recursive = TRUE, include.dirs = TRUE) 
dirs <- files[ file.info(files)$isdir ] 
+0

ご回答いただきありがとうございます、これは私のために働いた解決策です。 –

0

dirlist.dirsと違ってその機能を提供します。あなたの例では

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

directories <- dirs(full.names = TRUE, recursive=TRUE, pattern="R10m") 

はい、私もそれがディレクトリの一覧を表示するために2台の機能の一つは、あることを奇妙list.filesと名の類似性にもかかわらず、用意されていません見つけます同じような機能の場合と同じです。誰かがこれの理由を知っているなら、私は知ることに非常に興味があります。

更新

グレゴールさんのコメントの後、私は自分のソリューションをテストするために再現性の例を作成することにしました:

test_dirs <- c(
    paste0(c(1:3), "R10m", rep("a", 3)), 
    paste0(c(1:3), "R200m", rep("a", 3)) 
) 

for (test_dir in test_dirs){ 
    dir.create(test_dir) 
} 

list.dirs() 

[1] "." "./1R10ma" "./1R200ma" [4] "./2R10ma" "./2R200ma" "./3R10ma" [7] "./3R200ma" "./solo_kit-figure"

dir() 

[1] "1R10ma" "1R200ma" "2R10ma" "2R200ma"
[5] "3R10ma" "3R200ma" "a1.bed" "a2.bed"
[9] "a.bed" "solo_kit-figure" "solo_kit.md"

dir(pattern = "R10m") 
# dir(pattern = "*R10m") 
# also works 

"1R10ma" "2R10ma" "3R10ma"

dirもファイルをリストしているので、パターンがファイルとディレクトリの両方に適合する場合は問題があるかもしれませんが、ほとんどのアプリケーションでうまくいくと思います。

+2

これはうまくいきません... 'dir'は' list.files'のエイリアスではありませんか? (私はあまりにも混乱して見つける)。 'dir'のコードを見ると、引数を変更しなくても' list.files'だけが呼び出され、結果はファイルとフォルダを区別しません。 – Gregor

+0

私はSとの下位互換性のためにそれが含まれていたと喜んで賭けるでしょう。 – Gregor

+0

@Gregor、テストで更新。パターンに一致するファイルもリスト表示されます。そして、驚いたことに、 'list.files'のエイリアスではありません。 – fridaymeetssunday

関連する問題