在尝试调试 R 函数时,我想出了以下内容:
有没有办法选择性地将被调用函数的局部变量绑定(bind)到调用环境?

例如

testFunction <- function(x=1,y=2){
  localVar1 <- x + 2
  localVar2 <- x + y
  sum(x,y)
}

sumXY <- testFunction()
if(exists("localVar1") && exists("localVar2")){
    print("test passed")
}

请注意,此功能仅用于交互式调试,并且 <<- 运算符不适用于我的脚本。
编辑 1:我正在寻找一种不会改变功能的解决方案,因为我正在使用它来测试/调试分析代码。

最佳答案

您可以使用 trace() 建立一个调用,在退出之前将调用的评估框架保存到 testFunction()

然后,您可以检查评估框架的内容(此处分配给对象 TraceEnv ),因为它们在退出该环境之前看起来。

testFunction <- function(x=1,y=2){
  localVar1 <- x + 2
  localVar2 <- x + y
  sum(x,y)
}

trace(testFunction,
      quote({on.exit(assign("TraceEnv", parent.frame(4), .GlobalEnv))}))

sumXY <- testFunction()

if(with(TraceEnv, exists("localVar1") && exists("localVar2"))){
    print("test passed")
}
# [1] "test passed"

关于r - 我可以将函数的局部变量绑定(bind)到调用环境吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19899179/

10-12 18:59