在R中访问本地环境中的变量

在R中访问本地环境中的变量,r,global-variables,environment,R,Global Variables,Environment,我正在阅读哈德利·威克姆的《高级R》,以便更好地理解这种语言。我在“环境”一章中遇到了一个章节,他谈到了局部变量优先于全局变量 比如说, h <- function(){ x<-10 function(){ x } } i<-h() x<-20 i() 输出为13。我本来希望8,因为我在h()的调用函数g()中创建了一个局部变量y。不是吗 如果您能提供任何意见和指导,我将不胜感激。当调用h()函数时,您可以将x分配给该函数本地的3。当它试图计算x+y

我正在阅读哈德利·威克姆的《高级R》,以便更好地理解这种语言。我在“环境”一章中遇到了一个章节,他谈到了局部变量优先于全局变量

比如说,

h <- function(){
  x<-10
  function(){
    x
  }
}
i<-h()
x<-20
i()
输出为
13
。我本来希望
8
,因为我在
h()
的调用函数
g()
中创建了一个局部变量
y
。不是吗

如果您能提供任何意见和指导,我将不胜感激。

当调用
h()
函数时,您可以将
x
分配给该函数本地的3。当它试图计算
x+y
时,它在局部函数中找不到
y
的定义,因此,它取全局声明的
y
的值,即10。因此,输出为10+3=13。
g()
函数中的
y
值仅对该函数是局部的,而对
h()
函数不是局部的。所有功能的本地环境都是不同的,并且相互独立

如果希望
y
g
函数中保持其值,可以在
h()
函数中传递
y
的值

如下所示更新两个函数:

g <- function() {
     x <- 2
     y<-5 
     h(y)
}

h <- function(y) {
    x <- 3
    x + y
}
另外,如果将
g()
函数中的
y
更新为

g <- function() {
      x <- 2
      y <<-5 #Note the <<- operator. 
     h()  
}
g当调用
h()
函数时,您将
x
分配给该函数本地的3。当它试图计算
x+y
时,它在局部函数中找不到
y
的定义,因此,它取全局声明的
y
的值,即10。因此,输出为10+3=13。
g()
函数中的
y
值仅对该函数是局部的,而对
h()
函数不是局部的。所有功能的本地环境都是不同的,并且相互独立

如果希望
y
g
函数中保持其值,可以在
h()
函数中传递
y
的值

如下所示更新两个函数:

g <- function() {
     x <- 2
     y<-5 
     h(y)
}

h <- function(y) {
    x <- 3
    x + y
}
另外,如果将
g()
函数中的
y
更新为

g <- function() {
      x <- 2
      y <<-5 #Note the <<- operator. 
     h()  
}
g