10

我经常想在全局环境下的一个环境中创建很多变量。这可以通过以下envir参数轻松完成sys.source- 如果由一个正在采购的文件创建的所有变量都应该进入单个环境。

但我通常使用创建变量集的文件。一组应该进入一个环境,另一组应该进入另一个环境,依此类推。我不想将此文件拆分为多个文件,然后多次调用sys.source.

相反,我想要一个命令,让我更改分配新变量的默认环境。例如:

e <- new.env()
setDefaultEnvironment(e)
tmp <- 2
e$tmp           #  2 
.GlobalEnv$tmp  #  Error: object 'tmp' not found

setDefaultEnvironment不是真正的命令。

有没有安全的方法在 R 中做这种事情?

4

4 回答 4

16

最好明确一点:改变全局状态是危险的。因此:

e <- new.env()
with(e, {foo <- bar; foo2 <- bar2})

将干净利落地完成工作,不会大惊小怪,同时突出显示所涉及的环境。

于 2012-05-25T21:31:37.653 回答
10

也许有人可以对此进行改进,不再需要引用变量名:

e <- new.env()
`%=%` <- function(x,y) {assign(x,y,envir = e)}

"d" %=% 5

e$d
[1] 5

但这对我来说有点愚蠢。也许直接使用assign?更多的打字,也许,但它做你想做的事,危险性更小。

于 2012-05-25T19:16:46.437 回答
5

evalq函数将在指定环境中评估其第一个参数,因此您可以创建新环境,然后将分配包装到evalq.

于 2012-05-25T20:22:32.830 回答
1

而不是改变环境,一个简单的方法是将所有变量保存在一个列表中。

e <- list()
e$tmp <- 2
于 2016-11-23T12:22:57.637 回答