10

グローバル環境下の環境で、多くの変数を作成したいことがよくあります。envirこれは、 -- への引数を使用して簡単に実行できsys.sourceます。ソースとなるファイルによって作成されたすべての変数が単一の環境に移動することになっている場合。

しかし、私は通常、一連の変数を作成するファイルを操作します。1 つのセットは 1 つの環境に移動し、別のセットは別の環境に移動する必要があります。このファイルを複数のファイルに分割してから、 を複数回呼び出したくありません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 に答える