2017-06-23 9 views
1

ログファイルとコンソールの両方にメッセージを出力するためにRで関数を記述しました。しかし、コードの実行中に予期しないエラーが発生した場合、エラーはコンソールにのみ表示されます。コンソールとログファイルの両方にエラーメッセージを書き込む方法はありますか?ここで関数である..ここ エラー処理とログインR

log_con <- file("Text1.txt", open="a") 

loggerfn<-function(Message,LogConnection=log_con){ 
    cat(Message, file = LogConnection) 
    cat(Message) 
} 

のみが示されている私は意図的に未定義のオブジェクトsdfd.Below提供されたエラーメッセージを提供することにより、誤差を導入した上記のコードでのサンプルコード...

for (i in 1:10) 
{ 
    loggerfn("loop begins\n",log_con) 
    a <- rnorm(n = 100, mean = i, sd = 5) 
    loggerfn(mean(a),log_con) 
    loggerfn("loop Completed\n",log_con) 
    if(i==8){ 
    sdfs 
    } 
} 

ありますコンソールで、コンソールとログファイルの両方にエラーメッセージを書き込む方法はありますか?

Error: object 'sdfs' not found 
+0

Rでtry-catchブロックの使用について聞いたことがありますか? –

+0

ええ..私はいくつかの主要なプロジェクトを扱っています。私はtryを使用してエラーを予期することはできません、すべてのモジュールでブロックをキャッチします。 – PPC

答えて

1

メッセージと警告をファイルに転送するためにsink()を使用します。トリックは、引数の型=「メッセージ」を設定する

sink()関数出力の方向を定義http://www.statmethods.net/interface/io.htmlOutput error/warning log (txt file) when running R script under command line https://stat.ethz.ch/R-manual/R-devel/library/base/html/sink.html

参照されます。

説明

シンクは、接続にRの出力を分岐させる(そのような転換を停止します)。

sink.number() 

は、使用されているダイビング数を報告します。

sink.number(type = "message")は、現在エラーメッセージに使用されている接続番号を報告します。出力は上書きまたはファイルに追加するかどうかを 使用

sink(file = NULL, append = FALSE, type = c("output", "message"), 
    split = FALSE) 

sink.number(type = c("output", "message")) 

ターミナル

sink() 

への直接フ​​ァイルに出力

sink("myfile", append=FALSE, split=FALSE) 

リターン出力appendオプションを制御します。 splitオプションは、出力が出力ファイルだけでなく画面にも送られるかどうかを決定します。

sink()関数の例を次に示します。

出力はc:\ projectsディレクトリのoutput.txtに出力されます。 出力は既存のファイルを上書きします。ターミナルへの出力はありません。

sink("c:/projects/output.txt") 

出力がcwdのmyfile.txtに出力されます。出力は既存のファイルに を追加します。出力も端末に送信します。

sink("myfile.txt", append=TRUE, split=TRUE) 

出力をリダイレクトするときは、cat()関数を使用して出力に注釈を付けます。

+1

私は以下のコードを試しましたが、エラーメッセージ(_Error:object 'sdfs' not found_)がログファイルに書き込まれていません。これを確認できますか? (i = 1:10) { cat( "ループが開始される"、 "ループ開始"、 "シンク" "myfile.txt"、append = TRUE、split = TRUE) sink.number(タイプ= c( "出力")) for (i == 8)if(i == 8){sdfs} cat( " } sink() ' – PPC