1

次のパターンのファイルを含むディレクトリからファイルのリストを作成しようとしています。

Name_Surname_12345_noe_xy.xls  
Name_Surname_12345_xy.xls

xyは1文字または2文字です。

ここで、ファイル名に「noe」が含まれていないすべてのファイルのリストが必要です。「noe」しか読めない-を使ったファイル

fl = list.files(pattern = "noe.+xls$", recursive=T, full.names=T)

しかし、それらを除外する方法は見つかりませんでした。助言がありますか?


Markusに感謝します

4

1 に答える 1

3

すべてのファイルを取得し、それを使用grepしてファイルを見つけ、noeサブセット化します。

> all
[1] "Name_Surname_123425_xy.xls"    "Name_Surname_1234445_xy.xls"  
[3] "Name_Surname_12345_noe_xy.xls" "Name_Surname_12345_xy.xls"    
[5] "Name_Surname_13245_noe_xy.xls"
> all[grep("noe_xy.xls",all,invert=TRUE)]
[1] "Name_Surname_123425_xy.xls"  "Name_Surname_1234445_xy.xls"
[3] "Name_Surname_12345_xy.xls"  

すべてのファイルが一致するか、まったく一致しないエッジケースを常に確認してください。

> all[grep("xls",all,invert=TRUE)]
character(0)
> all[grep("fnord",all,invert=TRUE)]
[1] "Name_Surname_123425_xy.xls"    "Name_Surname_1234445_xy.xls"  
[3] "Name_Surname_12345_noe_xy.xls" "Name_Surname_12345_xy.xls"    
[5] "Name_Surname_13245_noe_xy.xls"

負のインデックスでgrepを使用すると、次のエッジケースを除いて機能します。

> all
[1] "Name_Surname_123425_xy.xls"    "Name_Surname_1234445_xy.xls"  
[3] "Name_Surname_12345_noe_xy.xls" "Name_Surname_12345_xy.xls"    
[5] "Name_Surname_13245_noe_xy.xls"
> all[-grep("noe_xy.xls",all)] # strip out the noe_xy.xls files

[1] "Name_Surname_123425_xy.xls"  "Name_Surname_1234445_xy.xls"
[3] "Name_Surname_12345_xy.xls"  

 # works. Now strip out any xls files (should leave nothing)

> all[-grep("xls",all)]
character(0)

# yup, that works too. Now strip out 'fnord' files, shouldn't remove anything:

> all[-grep("fnord",all)]
character(0)

エピックは失敗します!理由は読者の練習問題として残されています。

于 2012-08-01T09:25:23.297 に答える