traceback - 用于交互式和非交互式 R 会话的traceback()

  显示原文与译文双语对照的内容
0 0

我发现其他R 之间的交互和非交互会话的 traceback()那我不明白。 对于下面的代码,它将生成错误,但在交互式R 会话,我能看到回溯信息,而如果我将代码保存到 test.R并将该服务通过 Rscript test.RR -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 Ự 。 谢谢 !

时间: 原作者:

0 0

以及它的参数的默认值。 traceback()将查找一个对象名为 .Tracebackbaseenv()有关调用堆栈的信息。 它看起来( 从 src/main/errors.c) 喜欢 .Traceback才创建如果及其他条件, R_Interactive || haveHandler,表明此对象不是非交互式会话期间创建。 如果没有任何对象命名 .Traceback,你会看到如下消息" 没有可用的回溯" 。

但是,通过传递一个非NULL值。 x参数。 traceback(),一个可以获取有关调用堆栈的信息从非交互式会话。 非零的整数值( 指示调用中要跳过堆栈),c 的数量级别函数( R_GetTraceback) 称为调查调用堆栈中没有把 .Traceback.

所以有几个方法来获取回溯非交互式会话中的信息:

f = function() {
  on.exit(traceback(1))
  1 + 'a'
}
f()

或者,设置 options作为Brandon Bertelsen建议

options(error=function()traceback(2))

不同的值传递给 x在两个例子中会考虑不同数量的函数跳过

  1. on.exit例如, traceback(1)将跳过调用 traceback().

  2. 在本例中设置 options,要加匿名函数来调用 traceback()其中should/could也被跳过。

在本例中在OP,不多而取得更多信息使用 traceback()提供对于相比自动回溯中的错误非交互式会话。 但是,对于函数,它们具有( 和) 传递参数,使用 traceback()将更多信息性相比标准的演示文稿中的调用堆栈非交互式会话。

原作者:
...