微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在 foreach 循环中定义的全局变量不可用于之后调用的函数?

如何解决为什么在 foreach 循环中定义的全局变量不可用于之后调用的函数?

在 R 中,全局变量通常可以被函数访问,即使它们没有作为参数传递:

# fn that expects a global variable to exist
func = function() {
  return(globalVar + 2)
}

# outside the scope of a foreach loop
# this obvIoUsly works
globalVar = 2
func()

但似乎在 foreach 循环中,必须使用全局变量的超赋值才能让函数访问它:

# in foreach loop
# this breaks
rm(globalVar)
rs = foreach( i = 1:2,.combine=rbind ) %dopar% {
  globalVar = 2
  data.frame( y = func() )
}  


# in foreach loop,but with superassignment of globalVar
rs = foreach( i = 1:2,.combine=rbind ) %dopar% {
  globalVar <<- 2
  data.frame( y = func() )
} 
rs

然而常规的 for 循环不需要超级赋值:

# in for loop instead of foreach loop; regular assignment again
# this works again
rm(globalVar); rm(rs)
for( i in 1:2 ) {
  globalVar = 2
  new.row = data.frame( y = func() )
  
  if ( i == 1 ) rs = new.row else rs = rbind(rs,new.row)
} 
rs

在阅读其文档时,我几乎没有发现关于 foreach 的范围规则的信息。 导致这种行为的 foreach 的范围规则有什么特别之处?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。