[英]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.