繁体   English   中英

在全局环境中存储函数中的变量

[英]store variables from a function in the global environment

几年后回到此帖子,以添加另一个警告:不要这样做

我正在尝试在全局环境中存储函数中的变量,但是我发现SO post其他SO post都不适合我。 这是一个极其简化的示例,用于说明我的问题。 我不能只使用<<-使v全局化,因为我的实际函数创建了几十个变量。

代码(main_file.R)

source("function_me.R")
#environment(doGlobalThing) <-parent.frame(2) #didnt work
doGlobalThing()
v #cant get to this var from the global environment

代码(function_me.R)

doGlobalThing<-function(){
  #eval(v<-'hi',env=parent.frame(2)) #tried this, didnt work
   v<-'hi'
}

您可以使用assign

assign("v","hi",envir = globalenv())

这要求您将目标全局变量的名称作为字符串,但是即使使用数十种这样的向量,也可以很容易地做到这一点。

这个问题讨论了assign<<-之间的区别。 的主要不同之处在于assign允许您指定的环境-所以很容易用它来将数据存储在非全局,但持续的环境,让你可以如仿效R.静态变量虽然可以使用assign给修改全球环境,您应该意识到这样做并不是一件好事。 意外覆盖您不想覆盖的数据的风​​险太大。 大量使用全局变量的代码几乎可以始终重构为更干净的代码,而不是。 如果您需要从函数到调用环境获取大量异构数据,则最干净的解决方案是将所需数据返回到列表中。

接受的答案结束了对<<-讨论,并assign它一个好的报价:

邪恶和错误的用法是在全局环境中修改变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM