R-在自定义错误处理程序中从基本环境访问.Traceback

R-在自定义错误处理程序中从基本环境访问.Traceback,r,error-handling,R,Error Handling,我正在编写一个自定义错误处理程序(使用error选项),主要用于运行源代码的程序。在自定义错误处理程序中,我想计算导致错误的源文件的行号 通常,每当抛出错误时,都会修改基本环境中的.Traceback,以包括导致错误的调用堆栈。此外,直接出现在源文件中的调用被赋予classsrcref属性,该属性包含有关调用在文件中位置的信息 但是,.Traceback似乎直到自定义错误处理程序结束后才设置,这意味着我无法依靠它来查找导致错误的代码行号 在自定义错误处理程序中,是否有任何方法可以获得回溯生成的相

我正在编写一个自定义错误处理程序(使用
error
选项),主要用于运行
源代码的程序。在自定义错误处理程序中,我想计算导致错误的源文件的行号

通常,每当抛出错误时,都会修改基本环境中的
.Traceback
,以包括导致错误的调用堆栈。此外,直接出现在源文件中的调用被赋予class
srcref
属性,该属性包含有关调用在文件中位置的信息

但是,
.Traceback
似乎直到自定义错误处理程序结束后才设置,这意味着我无法依靠它来查找导致错误的代码行号

在自定义错误处理程序中,是否有任何方法可以获得
回溯
生成的相同信息?我知道我可以执行
sys.calls
来获取调用堆栈,但这不包括有关源的信息。

?traceback
中的警告部分说,“它在存储
的地方没有文档记录。traceback
也不可见,这是可以更改的。”因此,您不应该依赖该变量。相反,您应该按照
?traceback
的建议(并提供和示例)执行,并使用要跳过的调用的整数计数调用它

foo <- function(x) { print(1); bar(2) }
bar <- function(x) { x + a.variable.which.does.not.exist }
foo(2) # gives a strange error
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found

# This will print the stack trace at the time of the error.
options(error = function() traceback(2))
foo(2)
# [1] 1
# Error in bar(2) : object 'a.variable.which.does.not.exist' not found
# 2: bar(2) at #1
# 1: foo(2)
foo