4

複数行の呼び出しが存在する場合、潜在的なエラーにはmatch.call()の最初の行のみが含まれ、情報が失われ、文が不完全になります。簡単な例:

#proper error message:
runif(n=1, k=5)

#incomplete error message:
runif(n=1, k={5})

Rにエラーメッセージへの完全な呼び出しを含める方法は何でしょうか(おそらく複数行を折りたたむことによって)?私はこれをtryCatch設定で使用することに主に興味があります。

4

1 に答える 1

3

tryCatch次の方法で、設定内のエラーオブジェクトを調査してみました。

tryCatch( runif(n=1,k={5}),
          error = function(e) recover() )

次に、4 番目の環境 ( value[[3]](cond)) を選択して調べeます。

私はそれがあったことに気づきe$callました:

Browse[1]> e$call
runif(n = 1, k = {
    5
})

そのため、エラー メッセージはその最初の行だけを使用しているようです。

すべての行を一緒に折りたたむことができます:

Browse[1]> paste(deparse(e$call),collapse='')
[1] "runif(n = 1, k = {    5})"

したがって、次のようなものを試すことができます:

tryCatch( runif(n=1,k={5}),
          error = function(e) {
            cat(sprintf('Error in %s: %s\n',
                 paste(deparse(e$call),collapse=''),
                 e$message))
          } )

ただし、これはエラーメッセージ自体を修正するものではなく、エラーメッセージにつながる呼び出しのみを修正します。

runif(n = 1, k = { 5}) のエラー: 未使用の引数 (k = {

したがって、「xxx のエラー」は完了しましたが、「未使用の引数 xxx」はまだ完了していません。それは始まりですが、そこまでではありません。

これを改善する方法がわかりません(また、それが可能かどうかも知りたいです)。

于 2012-02-28T05:45:56.303 に答える