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