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

Posted

技术标签:

【中文标题】R编辑在父环境中定义的全局对象【英文标题】:R editing global object defined in parent environment 【发布时间】:2015-04-15 08:07:48 【问题描述】:

我想编辑在父函数中定义的数据框 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】:

改变

dat$a <- '1'

dat$a <<- '1'

【讨论】:

以上是关于R编辑在父环境中定义的全局对象的主要内容,如果未能解决你的问题,请参考以下文章

r语言中啥函数可以打开数据编辑窗口

要求 r 函数在全局环境中使用对象而不是对象的副本

如果对象存在于全局中,则R从函数中从全局环境中获取对象,但如果不存在则使用不同的默认值

使用 .onLoad() 将对象加载到 R 包中的全局环境中

如何在 R 中覆盖和编辑 plotly() 3D 对象的悬停模板

如何使R中无法访问全局环境中用户定义函数的源代码? (用于教育目的)