2016-08-09 13 views
0

このコマンドは、データ "filelist"をサブセット化してすべての "jpg"ファイルを削除します。grepl()を使用してデータの複数のパターンに一致させるR

filetype.isnotjpg <- setdiff(filelist, subset(filelist, grepl("\\.jpg$", filelist))) 

これは、ディレクトリのファイル名を含む文字列 "filelist"を取ります。 "jpg"、 "doc"、 "pdf"、 "xls"などのタイプでないファイルをすべて返したいと思います。リストをフィルタリングするのと同じ数の型を指定できるようにしたいと思います。理想的には

この再帰的なアルゴリズムは私がやりたいことに努めています

target.files <- setdiff(filelist, subset(filelist, grepl( 
    c("\\.jpg$", "\\.doc$", "\\.pdf$", "\\xls$"), filelist) 

のようなもの:

a <- setdiff(files.list, subset(files.list, grepl("\\.tmp", files.list, ignore.case = TRUE))) 

a <- setdiff(a, subset(a, grepl("\\.jpg", a, ignore.case = TRUE))) 
a <- setdiff(a, subset(a, grepl("\\.pdf", a, ignore.case = TRUE))) 
a <- setdiff(a, subset(a, grepl("\\.tif", a, ignore.case = TRUE))) 

など(適用のようなもの)が動作するのでしょうか?私は残念ながらRに新しいです。

42点の作品のソリューション:

 target.files <- setdiff(
     files.list, 
     subset(files.list, 
       grepl( 
       paste(
        c("\\.jpg", "\\.doc", "\\.pdf", 
        "\\.xls", "\\.tif", "\\.docx", "\\.xlsx", "\\.jpeg"), 
        collapse="|") , 
       files.list, 
       ignore.case = TRUE))) 
+0

再現可能な例はどうですか? –

+0

私が修正した 'grepl'のスペルミスがありました。 –

答えて

1

:あなたが何かを持つ単一のステップでこれを行うことができるようにlist.files機能は、パターン引数を受け入れること

target.files <- setdiff(filelist, subset(filelist, grepl(paste(
c("\\.jpg$", "\\.doc$", "\\.pdf$", "\\xls$"), collapse="|") , filelist) 

を知っていましたfile_exttoolsに設定して、ファイル名から拡張子を抽出します。あなたはケースを無視する必要がある場合は、リストまたは拡張周りtolowerをラップすることができます

filelist[!(tools::file_ext(filelist) %in% c("jpg","jpeg","doc","pdf","xls"))] 

:次に、あなただけの彼らはあなたのリストにあるかどうかを確認し、標準ベクトルのサブセットを使用することができます。

2

私はの崩壊セパレータpaste() -ingをしようとするだろう "|"正規表現のためのOR演算子れている:

あなたが使用することができます
my_files <- list.files(path="/path/to/dir/", 
         pattern=paste(c("\\.jpg$", "\\.doc$", "\\.pdf$", "\\xls$"), 
             collapse="|")) 
+0

これは動作しますが、私は今のところ文字列を生成することができます。 file.listはSQLデータベースから来ているので、list.files()はオプションではありません。 – jrzelling

関連する問題