4

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

例如

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:我正在寻找一种不会改变功能的解决方案,因为我正在使用它来测试/调试分析代码。

4

1 回答 1

5

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

然后,您可以检查评估框架的内容(此处分配给 object 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"
于 2013-11-11T05:45:34.763 回答