更改默认环境以分配新变量

use*_*473 10 r

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

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

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

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

但这setDefaultEnvironment不是一个真正的命令.

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

whu*_*ber 16

最明确的是:改变全球状态是危险的.从而:

e <- new.env()
with(e, {foo <- bar; foo2 <- bar2})
Run Code Online (Sandbox Code Playgroud)

将干净利落地完成这项工作,同时突出显示所涉及的环境.


jor*_*ran 10

也许有人可以对此进行改进,无需引用变量名称:

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

"d" %=% 5

e$d
[1] 5
Run Code Online (Sandbox Code Playgroud)

但这对我来说有点愚蠢.也许只是assign直接使用?也许更多的打字,但它可以做到你想要的更少的危险.

  • `"%=%"< - function(x,y){assign(as.character(substitute(x)),y,envir = e)}`这应该允许你做`d%=%5` d周围的报价. (7认同)

Gre*_*now 5

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