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

时间:2016-02-29 13:39:18

标签: r

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

例如,如果我有一个功能

my_fun <- function(){
  a <- 1
}

我想调用my_fun()来产生与执行a <- 1相同的结果。

我知道一种方法是使用parent.frame,如下所示,但我更喜欢一种不涉及重写每个变量赋值的方法。

my_fun <- function(){
  env = parent.frame()
  env$a <- 1
}

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$aresult$b的值为ab

另见Function returning more than one value