2012-05-25 66 views
8

我經常想在全球環境下的環境中創建多個變量。這可以通過envir參數sys.source輕鬆完成 - 如果所有由源文件創建的變量都應該放入單個環境中。更改分配新變量的默認環境

但我通常使用一個創建變量集的文件。一套應該進入一個環境,另一套應該進入另一個環境,等等。我不想將這個文件分成多個文件,然後多次調用sys.source

相反,我想要一個命令,讓我可以更改默認環境以分配新變量。例如:

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

setDefaultEnvironment是不是一個真正的命令。

R有沒有安全的方法來做這種事情?

+2

你能提供一些細節,爲什麼你要這樣做 – Dason

+0

@Dason - 是的,我更新了一些更詳細的原始文章。 – user697473

回答

4

evalq函數將在指定環境中評估其第一個參數,以便您可以創建新的環境,然後將作業包裝到evalq中。

8

也許有人可以改善這一點,不再需要引用變量名:

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

"d" %=% 5 

e$d 
[1] 5 

但這種感覺那種傻傻的我。也許只是直接使用assign?也許更多的打字,但它可以做到你想要的並且危險較小。

+7

'「%=%」< - function(x,y){assign(as.character(substitute(x)),y,envir = e)}''應該允許你做'd%=%5'沒有引號d。 – Dason

+0

你甚至可以暫時覆蓋'='(和/或'<-')。但要小心,它會打破各種各樣的東西。 ;-) –

10

最好是明確的:改變全球國家是危險的。因此:

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

將做的工作乾淨,很少做文章,而突出顯示所涉及的環境。

0

取而代之的是改變環境,一個簡單的方法是將所有變量保存在列表中。

e <- list() 
e$tmp <- 2