这是一个示例函数,假设我无法编辑它。
myfun <- function(){ x <- 1 ; stop( "error here" ) }
当
stop()
发生时,我将如何访问对象 x
看看它是什么?不确定我是否应该使用这样的东西,或者我是否需要与
dump.frames
相关的东西,或者如果这在不改变的情况下根本不可能实现 myfun()
withCallingHandlers( myfun() , error = function(e){ print( e ) } )
我正在寻找与此行为类似的东西,但需要在没有
myfun()
的情况下进行myfun <- function(){ on.exit( print( x ) ) ; x <- 1 ; stop( "error here" ) }
myfun()
对于我的用例,我无法更改
myfun()
因为大约有五十个函数,但我想在出错时知道每个函数中的名称一致的对象谢谢!
最佳答案
选项 1:
当然,您可以使用 browser()
单步执行这些函数。 ,但这对于您想要的东西来说可能太耗时了。
选项 2
尽管您说无法更改 myfun() 的原因是“因为大约有五十个函数”,但这并不构成不可逾越的障碍。 R 的强大功能之一是它可以编辑自己的函数。所以我们可以添加一个 on.exit
像这样调用函数:
body(myfun) <- as.call(c(as.name("{"), expression(on.exit(print(x))), body(myfun)))
我们可以将它包装在一个方便的函数中,它不会像这样改变原始函数:
print.on.exit = function(f, ...){
body(f) <- as.call(c(as.name("{"), expression(on.exit(print(x))), body(f)))
f(...)
}
print.on.exit(myfun)
关于r - R : access known object within function at time of function error 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387796/