2017-12-18 10 views
1

スクリプトのエラーメッセージをログファイルに書き込もうとしています。複数のスクリプトコンポーネントを実行中にエラーメッセージをログファイルに追加するR

ただし、スクリプトに追加のコンポーネントを追加すると、両方のエラーメッセージが追加されることはありません。この場合、両方の入力ファイルは存在せず、ファイルごとに「そのようなファイルディレクトリはありません」と指定する必要があります。両方の入力ファイルに対する私の試みです:

enter code heretest <- file("error_file.log", open = "wt") 

sink(test, type = "message") 

try(data <- read.delim("genes2.txt", 
         header = TRUE, 
         as.is = TRUE)) 

sink(type = "message", append = TRUE) 
close(test) 

test2 <- file("error_file.log", open = "wt") 
sink(test2, type = "message") 

try(variables <- read.delim("Book3.txt", 
          header = TRUE, 
          as.is = TRUE, 
          check.names = FALSE, 
          text = TRUE, 
          na.strings = c("", NA))) 

sink(type = "message", append = TRUE) 
close(test2) 

ありがとうございました!

p.s.それぞれのtry()に対して私自身のエラーメッセージをカスタマイズすることは可能でしょうか?

+0

'try'の代わりに' tryCatch'を使用して、エラーメッセージeをキャッチして置き換えます。 ( "愚かなmsg"、e $ message、fixed = TRUE))print( "clever msg")else print( "愚かなmsg" $メッセージ)}) '。危険な部分は、他のRインストールが英語以外の言語でエラーメッセージを出すかもしれないということです。 –

+0

上記のスクリプトの文脈でこの例を挙げてください。私はどこの機能を配置するか分からない。ありがとうございました! –

答えて

1

test <- file("error_file.log", open = "wt") 
sink(test, append = TRUE, type = "message") 

tryCatch(data <- read.delim("genes2.txt", header = TRUE, as.is = TRUE), 
     error = function(e) { 
      # replace one specific error message with another one 
      if (grepl("cannot open", e$message, fixed = TRUE)) 
      # using "message" instead of "print" since you are sinking into type "message" (not "output") 
      message("Customized error message 1: The file could not be opened\n") 
      else 
      message(e$message) 
     } 
     # If you wanted to replace the warnings too you will run into big problems: 
     # tryCatch stops the execution and the error handler above is never called 
     # causing the log to be empty. Conclusion: Don't reinvent the wheel and 
     # use a suitable logging framework (e. g. the package "futile.logger")... 
     # , warning = function(w) {return("Warning ignored...")} # ignore warnings 
) 

tryCatch(variables <- read.delim("Book3.txt", header = TRUE, as.is = TRUE, check.names = FALSE, text = TRUE, na.strings = c("", NA)), 
     error = function(e) { 
      # Always write your specific error message (+ the original message if you want) 
      message(paste("Customized error message 2: The file could not be opened. Details:", e$message, "\n")) 
     } 
) 

sink(type = "message") 

あなたは警告を交換したい場合は、あまりにもあなたが問題に実行されますが(上記のコードでは、私のコメントを参照してください)、溶液を

ので、私はパッケージfutile.loggerのような既存のロギングフレームワークを使用することをお勧めだと思います)+ trywithCallingHandlersを使用して(さらに複雑なコードになります(機能ftryを参照)の代わりに車輪の再発明とに実行しているの多くの問題レム。 「重大度」を設定してログに記録することができます。 g。あなたが(詳細はR: Catch errors and continue execution after logging the stacktrace (no traceback available with tryCatch)と関連の質問SOの長いリストを参照)のログでエラー処理を結合したい場合にのみ、エラーが、警告なし...

tryCatch

はRでの獣は

...であるあなたの場合trytryCatchに自動ログを追加する場合は、パッケージtryCatchLoghttps://github.com/aryoda/tryCatchLog)を使用できます。コンプライアンスの理由から:私はパッケージの作者です...

2

これを使用してみてください、それはerror_file.logするメッセージの両方を追加します: -

test <- file("error_file.log", open = "wt") 
sink(test, append = TRUE, type = "message") 


try(data <- read.delim("genes2.txt", 
         header = TRUE, 
         as.is = TRUE)) 


try(variables <- read.delim("Book3.txt", 
          header = TRUE, 
          as.is = TRUE, 
          check.names = FALSE, 
          text = TRUE, 
          na.strings = c("", NA))) 


sink(type = "message") 

ので、エラーファイルが持っているでしょう: -

Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file 'genes2.txt': No such file or directory 
Error in file(file, "rt") : cannot open the connection 
In addition: Warning message: 
In file(file, "rt") : 
    cannot open file 'Book3.txt': No such file or directory 

私はこれがあなたの問題を解決したいと考えています。

トリックはあなたのログファイルを開き、最初から一度シンクします。そして最後にはシンクしてください。あなたは、エラーメッセージこの方法をカスタマイズすることができます基礎として@suchaitの有効な回答を使用して

+0

奇妙なことに、私はそのアプローチを試しても機能しませんでしたが、今はそうです。私が推測するプログラミングへようこそ。カスタムメッセージのアイデアはありますか? –

+0

あなたの問題を解決した場合は、回答を受け入れてください。カスタムメッセージは? – suchait

+0

申し訳ありません。全体の代わりに:ファイル(ファイル、 "rt"): ファイル 'Book3.txt'を開くことができません:そのようなファイルやディレクトリはありません。私は次のようなエラーを出します: "あなたの入力ファイルを確認してください"。 error_file.logに追加します。 –

関連する問題