我观察到交互式和非交互式R会话关于traceback()
存在差异,但我不明白原因。对于以下代码,它将产生一个错误,但在交互式的R会话中,我可以看到回溯信息,而如果我将代码保存到test.R
并通过Rscript test.R
或 R -f test.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。谢谢!
traceback
在baseenv()
中寻找一个名为.Traceback
的对象。从src/main/errors.c
看来,只有在R_Interactive || haveHandler
等其他条件成立时才会创建它。如果没有.Traceback
,你将会得到消息 "No traceback available"。在?traceback
下也有一个警告提到了.Traceback
。 - BenBarnes