允许R函数直接改变父环境

NGa*_*ney 0 r

我试图找出如何允许函数在其父环境中直接更改或创建变量,无论父环境是全局环境还是其他函数.

例如,如果我有一个功能

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)

G. *_*eck 6

试试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值为ab.

另请参见函数返回多个值.