我正试图弄清楚如何允许函数在其父环境中直接更改或创建变量,无论父环境是全局环境还是其他函数。
例如,如果我有一个功能
my_fun <- function(){
a <- 1
}
我想调用my_fun()来产生与执行a <- 1
相同的结果。
我知道一种方法是使用parent.frame
,如下所示,但我更喜欢一种不涉及重写每个变量赋值的方法。
my_fun <- function(){
env = parent.frame()
env$a <- 1
}
答案 0 :(得分:6)
尝试with
:
g <- function(env = parent.frame()) with(env, { b <- 1 })
g()
b
## [1] 1
请注意,通常最好将变量作为返回值传递,而不是直接在父帧中创建它们。如果您要返回许多变量,则可以始终在列表中返回它们,例如h <- function() list(a = 1, b = 2); result <- h()
现在result$a
和result$b
的值为a
和b
。