如何在R语言内部函数中访问并修改外部函数的局部变量?
在R中修改外部函数的变量
你的判断没错——当前代码里内部函数g中的x <- x + 1只是在g的局部环境里创建了x的副本,并没有修改外部函数f中定义的x。运行原代码的输出是:
[1] 1 [1] 2
可见f里的x仍保持初始值1,g返回的是自己局部环境里的x。
要让g访问并修改f中的x,可以用<<-操作符,它会向上遍历父环境查找目标变量,找到后直接修改,而非创建局部副本。修改后的代码如下:
f <- function() { x <- 1 g <- function(y) { x <<- x + 1 # 向上查找并修改外层函数f中的x return(x) } r <- g(1) print(x) print(r) } f()
运行这段代码会得到:
[1] 2 [1] 2
此时f中的x已经被g成功修改。
需要注意的是,<<-会一直向上查找环境(从当前函数的父环境开始),如果在所有父环境都没找到目标变量,它会在全局环境中创建该变量,使用时要注意避免意外修改全局变量。
内容的提问来源于stack exchange,提问作者Ray Tayek
相关产品推荐
相关产品推荐

