gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:55:22 26 4
gpt4 key购买 nike

多年后回到这篇文章来添加另一个警告:不要这样做

我试图在全局环境中存储来自函数的变量,但我没有找到任何解决方案 SO postdifferent 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())

这需要您将目标全局变量的名称作为字符串,但即使使用包含许多此类内容的向量也可以轻松做到这一点。

This question讨论 assign 之间的差异和 <<- .主要区别在于 assign允许您指定环境——因此很容易使用它在非全局但持久的环境中存储数据,这样您就可以,例如在 R 中模拟静态变量。虽然可以使用 assign要修改全局环境,您应该意识到这样做很少是一件好事。意外覆盖您不想覆盖的数据的危险太大了。大量使用全局变量的代码几乎总是可以重构为更简洁的代码,而不会。如果您需要从函数获取大量异构数据到调用环境,最简洁的解决方案是在列表中返回所需的数据。

accepted answer结束对 <<- 的讨论和 assign引用一句好话:

The Evil and Wrong use is to modify variables in the global environment.

关于r - 将函数中的变量存储在全局环境中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com