3

親環境 (関数が呼び出されるスコープ) の変数にアクセスする必要がある関数があります。変数はメモリの点で大きいので、呼び出される関数に値で渡したくないでしょう。グローバルスコープで変数を宣言する以外に、これを行う標準的な方法はありますか? 例えば:

g <- function (a, b) { #do stuff}

f <- function(x) {
    y <- 3 #but in my program y is very large
    g(x, y)
}

で y にアクセスしたいと思いますg()。だから、このようなもの:

g <- function (a) { a+y }

f <- function(x) {
    y <- 3 #but in my program y is very large
    g(x)
}

これは可能ですか?

ありがとう

4

1 に答える 1

7

「グローバルスコープで変数を宣言する」ことに利点はなく、その意味によってはRでも不可能な場合があります。確かに 2 番目の形式を使用できます。オブジェクトの重複または三重のコピーを引き起こすアクションは代入です。コードで説明しようとしていることをより詳細に説明する必要があります: y <- 3. これは通常、囲んでいるフレームにある「y」という名前のオブジェクトにアクセスするだけの関数内では必要ありません。

宣言された環境に変数を格納すると、アクセスの効率が向上する場合がありますが、効率はハッシュ テーブルを使用するため速度が向上するという点であると理解しています。リスト要素にアクセスするのと同じ方法で、環境内の項目にアクセスします。

> evn <- new.env()
> evn$a <- rnorm(100000)
> ls(evn)
[1] "a"
> length(evn$a)
[1] 100000

BigMemory プロジェクトは、このための機能を提供する場合があります: http://www.bigmemory.org/。これとLumley の biglmは、コメントで言及されている大規模なデータセットに役立つ場合があります。

于 2012-06-25T19:40:55.413 に答える