r - R : access known object within function at time of function error 中的错误处理

标签 r error-handling

这是一个示例函数,假设我无法编辑它。

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/

相关文章:

c++ - 输入布局,访问冲突,错误处理无法正常运行

r - 根据组过滤多个出现的情况

javascript - 使用javascript将 'long'数据转换为 'wide'数组

git - 如何从git ls-remote捕获错误代码?

java - 如何在带有请求正文的请求上使用getPage()?

php - 为什么 E_WARNING 表现得像 E_ERROR?

r - 在 NAMESPACE 中使用 Roxygen 制作 S3method

r - 访问函数的父环境并移除对象

r - 如何在 R 中计算具有不同分辨率 strip 的 Sentinel-2 图像(来自 GEE)的缨帽变换?

c++ - clang-format 功能和错误检查在同一行