私が理解していない対話型と非対話型のRセッションの違いは、traceback()
です。以下のコードではエラーが発生しますが、インタラクティブなRセッションではトレースバック情報が表示されますが、コードをtest.R
に保存してRscript test.R
またはR -f test.R
でコールすると、トレースバックは表示されなくなります。対話型と非対話型のRセッションのトレースバック()
f = function() {
on.exit(traceback())
1 + 'a'
}
f()
:
> f = function() {
+ on.exit(traceback())
+ 1 + 'a'
+ }
> f()
Error in 1 + "a" : non-numeric argument to binary operator
1: f()
非対話型実行:
$ Rscript test.R
Error in 1 + "a" : non-numeric argument to binary operator
Calls: f
No traceback available
Execution halted
I ?traceback
に説明がありませんでした。非対話型のRセッションでトレースバックを有効にする方法があるのだろうかと思います。ありがとう!
'オブジェクトを探しますtraceback' baseenv()で '.Traceback'と呼ばれています。これは 'src/main/errors.c'のように見えますが、他の条件の中でも' R_Interactive || haveHandler'。 '.Traceback'がなければ、" No traceback available "というメッセージが表示されます。また '?Traceback'には' .Traceback'という警告があります。 – BenBarnes
スクリプトでオプション(error = traceback)を設定してon.exit呼び出しを削除しただけで、目的の効果が得られます。エラーの「ステップ」のために複製が作成されますが。 –
@BrandonBertelsen、私が知る限り、非対話型セッションでエラーが発生した場合でも呼び出しスタックは返されますが、トレースバック情報にはアクセスできません。 – BenBarnes