我觀察到一個關於traceback()
的交互式和非交互式R會話之間的不同,我不明白。對於下面的代碼,它會產生一個錯誤,但是在交互式R會話中,我可以看到回溯信息,而如果我將代碼保存到test.R
並通過Rscript test.R
或R -f test.R
調用它,我不會再看到回溯:traceback()用於交互式和非交互式R會話
f = function() {
on.exit(traceback())
1 + 'a'
}
f()
在交互式R對話:
> 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
我在?traceback
沒有看到解釋,我想知道是否有辦法爲非交互式R會話啓用回溯。謝謝!
'traceback'查找對象在'baseenv()'中調用'.Traceback'。它看起來像(從'src/main/errors.c'),只有在除其他條件之外'R_Interactive || haveHandler'。如果沒有'.Traceback',你將會得到「沒有回溯可用」的消息。 'traceback'還有一個警告提到'.Traceback'。 – BenBarnes
如果您只是在腳本中設置選項(error = traceback),並刪除on.exit調用,您將獲得所需的效果。儘管由於錯誤的「步驟」它確實會造成重複。 –
@BrandonBertelsen,據我所知,仍然不會允許您訪問追溯信息,儘管在非交互式會話中發生錯誤時無論如何都會返回調用堆棧。 – BenBarnes