繁体   English   中英

将a R function 产生的对象带到主工作环境

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM