簡體   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