[英]Bring the objects produced by a R function to the main working environment
我正在尝试检查 R function 生成的内部对象,如下例所示:
myfunction <- function(arg1, arg2){
sum.both <- arg1+arg2
diff.both <- arg1-arg2
return(diff.both)
}
我知道我可以通过修改 function 本身将它带到工作环境中:
myfunction.mod <- function(arg1, arg2){
sum.both <- arg1+arg2
sum.both <<- sum.both
diff.both <- arg1-arg2
return(diff.both)
}
myfunction.mod(1,2)
通过这样做,我可以通过在控制台中键入ls()
来查看sum.both
object。 但是,我正在寻找一种方法来从任何现有的 function 中获取此类内部对象。因此,我尝试了debug()
和environment()
但没有成功。 任何有关如何从 function 获取内部对象的想法或指示将不胜感激。
我想修改现有 function 的一种简单方法是使用trace()
调试工具。 我们可以使用它来插入将在 function 退出时运行的代码,以将 function scope 中的所有值“泄漏”到全局 scope 中。这是一个 function
make_leaky <- function(f) {
fn <- substitute(f)
invisible(trace(fn, print=FALSE, exit=quote(list2env(mget(ls()), globalenv()))))
}
然后我们可以用下面的function来测试一下
foo <- function(x, y) {
a <- x+7
b <- x*y
b/a
}
我们将使用ls()
查看每一步的所有变量
ls()
# [1] "foo" "make_leaky"
foo(5,2)
# [1] 0.8333333
ls() # NO NEW VARIABLES CREATED HERE
# [1] "foo" "make_leaky"
make_leaky(foo)
foo(5,2)
# [1] 0.8333333
ls() # ALL VARIABLES FROM FOO ARE NOW IN GLOBAL ENV
# [1] "a" "b" "foo" "make_leaky"
# [5] "x" "y"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.