7

を使用tryCatchすると、エラー ハンドラを定義し、 を使用conditionCallしてエラーの原因となった呼び出しを特定できます。例えば、

tryCatch(
    eval(parse(text="prnit('Hello')")),
    error=function(e) {
      cl <- conditionCall(e)
      #...
    })

Rプロンプトで悪い呼び出しに到達できますか? 今まで、私はこの解決策しか見つけませんでした:

> err_hdl  <- function() {
    file1 <- tempfile("Rrawhist")
    savehistory(file1)
    rawhist <- readLines(file1)
    unlink(file1)

    cat("Error : ", tail(rawhist,1), "\n")
    return(TRUE)    
}
> options(error=err_hdl)
> prnit("Hello")

しかし、もっと簡単な方法が必要だと思います..

どんなヒントでも大歓迎です!

懸賞金を出しました。プラットフォームに依存しないファイル I/O なしで上記の関数の動作を実装する最初の回答err_hdlが受け入れられます。

編集 -- 上記のコードは Windows でのみ動作するようです。エラーが発生した入力を探しています。

4

1 に答える 1

2

dump.framesファイルにダンプするのではなく、ファイル内のオブジェクトにダンプするように指示できるようです.GlobalEnv。ただし、Mac 以外ではテストしていません。以下は役に立ちますか?

err_hdl2 <- function() {
  dump.frames("theErr", to.file = FALSE)
  cat("What happened?\n", attr(theErr,"error.message"), "\nOh.\n")
}
options(error = err_hdl2)

> prnit(dt)
Error: could not find function "prnit"
What happened?
 Error: could not find function "prnit"

Oh.

グローバル環境でオブジェクトを作成することには欠点があるのではないかとtheErr思います。

> theErr
$`function () 
{
    dump.frames("theErr", to.file = FALSE)
    cat("What`
<environment: 0x1030fe140>

attr(,"error.message")
[1] "Error: could not find function \"prnit\"\n"
attr(,"class")
[1] "dump.frames"
于 2012-07-07T19:26:04.460 に答える