在尝试调试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")
}
Run Code Online (Sandbox Code Playgroud)
请注意,此功能仅用于交互式调试,并且<<-操作员不适合我的脚本.编辑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"
Run Code Online (Sandbox Code Playgroud)