2017-01-06 22 views
0

オブジェクトに格納されている15個のファイルのリストFILELISTがあります。特定のディレクトリからすべてのファイルをFILELISTから読み取って、その下のファイルを追加します。R:try()での例外処理

以下のコードでは、「dataset」というオブジェクトには最後に追加されたファイルがあります。私が直面している問題は、FILELISTに存在する1つ以上のファイルがディレクトリに存在しない場合です。以下のようなエラーが表示されます。私が必要とするのは、15個のファイルのうち1個以上がディレクトリに存在しない場合、コードは残りのファイルを追加し続けるべきです。

私はtry例外処理方法で試しましたが、それでもエラーが下になり、コードは残りのファイルを処理しません。ファイル内

エラー(ファイル、「RT」):さらに接続 を開くことができません:警告メッセージ: をファイルに(ファイル、「RT」): を開くことができませんファイル「PREDICTION_2016_Q4_Wk13.csv」:そのようなファイルをまたはディレクトリ

コード:私はこのために例外処理を使用することはありません

for (file in FILELIST) { 
    try( 
    if (!exists("dataset")) { 
     dataset <- read.table(file, header=TRUE, sep=",") 
    } 
    if (exists("dataset")) { 
     temp_dataset <-read.table(file, header=TRUE, sep=",") 
     dataset<-rbind(dataset, temp_dataset) 
     rm(temp_dataset) 
    }, 
    silent = T 
) 
} 
+0

以下のすべてのソリューションは、あなたがここに 'for'ループを失うべきで、提案、あなたは' try'コールを必要としないので。また、ファイルに要素として解釈されるいくつかの列が含まれている場合、 'stringsAsFactors'を' FALSE'に設定した場合よりも実行が遅くなることを期待してください。 –

答えて

0

for (file in intersect(FILELIST, list.files())) { 
+0

ありがとうございます。それはうまくいった。 – guptaraviraj

0

存在して、最後にそれらを一緒に一つ一つを読み、rbindものにFILELISTを減らすために最初に使用file.existsFilter:代わりにこのような何かを行います。

FILELISTには現在のディレクトリのファイル名が含まれており、ファイルが別の場所にあり、パス/ファイル名がFILELISTに指定されている場合にも機能します。

パッケージは使用されていません。

do.call("rbind", lapply(Filter(file.exists, FILELIST), read.csv)) 

更新:改善されたコード。スピードのために+ dplyrreadrを使用して、2件の他の回答の

+0

"パッケージは使用されていません":-P –

+0

ありがとうございます。それはうまくいった。 – guptaraviraj

0

コンビネーション:

library(dplyr) 
library(readr) 

# existing files 
f <- intersect(FILELIST, list.files()) 

# or identically: 
# f <- intersect(FILELIST, dir()) 
# f <- FILELIST[ file.exists(FILELIST) ] 

# combine in a single dataset 
d <- bind_rows(lapply(f, read_csv)) 
+0

ありがとうございます。それはうまくいった。 – guptaraviraj