3

R では、エラーが原因で実行が停止した場合、traceback()どの関数でエラーが発生したか、どの関数がその関数から呼び出されたかなどを評価できます。次のような結果が得られます。

8: ar.yw.default(x, aic = aic, order.max = order.max, na.action = na.action, 
       series = series, ...)
7: ar.yw(x, aic = aic, order.max = order.max, na.action = na.action, 
       series = series, ...)
6: ar(x[, i], aic = TRUE)
5: spectrum0.ar(x)
4: effectiveSize(x)

これらの関数に渡された引数を見つける方法はありますか? effectiveSize()この場合、どの引数が に渡されたか、つまり が何であるかを知りたいですx

エラーは自分のコードでは発生しませんが、パッケージ関数で発生します。Rが初めてなので、少し迷っています。

これを適切に行う方法がわからないので、パッケージ関数の定義を見つけて変更しようとしましたが、ソースファイルがあるはずの場所にファイルしか見つかりません.rdb。これはバイトコンパイルされたものだと思います。

4

2 に答える 2

3

options(error=recover)問題のあるコードを設定してから再度実行することをお勧めします。今回は、エラーが発生すると、調査するフレームを選択できるインタラクティブなデバッグ環境が表示されます。呼び出しスタックで呼び出しの評価環境に入るために入力できることを除いて、表示されるものとほとんど同じように見えます。フレームに入って入力すると、その引数のリストが表示されます。traceback()77ls()

例 ( に基づく?traceback) は、おそらくこれを示す最良の方法です。

foo <- function(x) { print(1); bar(2) }
bar <- function(x) { x + a.variable.which.does.not.exist }

## First with traceback()
foo(2) # gives a strange error
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
traceback()
# 2: bar(2) at #1
# 1: foo(2)

## Then with options(error=recover)
options(error=recover)
foo(2) 
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
# 
# Enter a frame number, or 0 to exit   
# 
# 1: foo(2)
# 2: #1: bar(2)

Selection: 1
# Called from: top level 
Browse[1]> ls()
# [1] "x"
Browse[1]> x
# [1] 2
Browse[1]>    ## Just press return here to go back to the numbered list of envts.
# 
# Enter a frame number, or 0 to exit   
# 
# 1: foo(2)
# 2: #1: bar(2)

R には多くの便利なデバッグ ツールがあり、そのほとんどは数年前のこの SO の質問への回答で説明されています。

于 2013-05-11T02:25:04.043 に答える