2017-06-07 14 views
1

私は.tar.gzファイルのリストをループし、untarして分析します。ここまでは順調ですね。問題は、一部のファイルが壊れている場合、untarがエラーをスローし、処理が停止することです。tarからエラーをキャッチして処理を続行します。

私のコードは、そのようなものです:

f <- dir(path.to.files, pattern=".tar.gz") 
for(k in 1:length(f)){ 
    # make sure the temporary dir is empty 
    file.remove(dir(path = tempdir(), full.names = TRUE) 
    untar(f[k], exdir = tempdir()) 
    # do some analisys with the extracted files 
} 

私はむしろ、untarしからエラーをキャッチし、その破損したファイルをスキップし、単に私のループを続けるだろう。私はすでにtrytryCatchを使用しようとしましたが、運がありません。

untarにエラーではなく警告を表示する方法はありますか?

+0

「tryとtryCatchを使用しようとしたときに起こったことの説明を含めてください。」これは、問題の診断に役立ちます。また、 'untar'にはtarプログラムにオプションを渡すextras引数があります。たぶん、tarプログラム自体には、より正常に失敗するオプションがあるかもしれません。 – lmo

+0

'try'は追加の警告につながります:seq_len(ceiling(size/512L))のi)に対してですが、私は間違った方法で' tryCatch'を使用したことを知りました。私は単にエラーを評価せずに、untarコマンドの前に置くだけです。 tryCatchの内部にエラー処理関数を置くことで、この問題が解決されました。とにかくありがとう。 – smoff

答えて

1

tryCatchのfinally引数にnextを追加すると、ループを続行できます。次の例を考えてみましょう。ループは1から3まで実行され、反復値が出力されます。値が2に等しいとき、Rは、私の現在の作業ディレクトリに存在しないファイル "無題-3.synctex1.gz" を、untarするしようと

for(i in 1:3) { 
    print(i) 
    if(i == 2) tryCatch(untar("untitled-3.synctex1.gz"), finally=next) 
} 

[1] 1
[1加えて、接続を開くことができない:メッセージ警告:gzファイルで
を(path.expand(tarファイルデバッグ gzファイルにエラー(path.expand(tarファイル)、 "RB")付き] 2
表示トレースバック

再実行)、 "rb"): 圧縮ファイルを開くことができません 'タイトルD-3.synctex1.gz」、考えられる理由は 『いいえそのようなファイルやディレクトリは』
[1] 3

我々は、エラーメッセージや警告が表示されますが、ループは次の反復に継続して印刷します3番目の値。

+0

ニース。同様の解決策を考え出し、'tryCatch'の3番目の引数に'NULL 'を追加し、'tryCatch'の戻り値がNULLであるかどうかを評価しました。 – smoff

関連する問題