R编辑在父环境中定义的全局对象

时间:2015-04-15 08:07:48

标签: r

我想编辑父函数中定义的数据框dat,就像在示例中一样,但是输出(从main返回)给出了一个未发生编辑的数据框。这显然是由于在R中滥用全局变量,但有人可以解释为什么会这样,以及我如何能够实现它?

indat <- data.frame(a = '0', b = '0')


main <-function(data){
  assign("dat", data, envir = .GlobalEnv) 
      inner1()
      inner2()
  return(dat)      
}


inner1<-function(){
  print(dat$a)
  dat$a <- '1'
  return()

}

inner2<-function(){
  print(dat$b)
  dat$b <- '1'
  return() 
}

1 个答案:

答案 0 :(得分:0)

更改

dat$a <- '1'

dat$a <<- '1'

&lt;&lt; - 为全球环境指定价值,&lt; - 在本地,&#39;内部功能&#39;环境。 虽然您已经创建了数据&#39;作为一个全局变量,当使用&#39;&lt; - &#39;时,R会在inner1()环境中创建一个新的数据变量。操作员,据我所知。