Rで関数を作成しました。これは、参照で渡すことができれば、意図したとおりに機能します。これには、呼び出しをネストsapply
し、その中で割り当てを実行することが含まれます。Rは参照渡しを使用しないため、関数は機能しません。
R.ooのように、参照によるパスをRに提供するパッケージがあることは承知していますが、もっと良い方法があるかどうかを知りたいと思います。参照渡しが利用できない場合にデータを渡す「R」方法は何ですか?
Rで関数を作成しました。これは、参照で渡すことができれば、意図したとおりに機能します。これには、呼び出しをネストsapply
し、その中で割り当てを実行することが含まれます。Rは参照渡しを使用しないため、関数は機能しません。
R.ooのように、参照によるパスをRに提供するパッケージがあることは承知していますが、もっと良い方法があるかどうかを知りたいと思います。参照渡しが利用できない場合にデータを渡す「R」方法は何ですか?
引数を変更しないと、実際にはコピーされないため、特別なことをするのは無意味かもしれません。
> gc() # using 6.2 MB of Vcells
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 560642 15.0 984024 26.3 984024 26.3
Vcells 809878 6.2 2670432 20.4 2310055 17.7
> x <- as.numeric(1:1000000)
> gc() # now we are using 13.9 MB
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 560640 15.0 984024 26.3 984024 26.3
Vcells 1809867 13.9 2883953 22.1 2310055 17.7
> f0 <- function(x) { s <- sum(x); print(gc()); s }
> f0(x) # f0 did not use appreciably more despite using a huge vector
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 560655 15.0 984024 26.3 984024 26.3
Vcells 1809872 13.9 2883953 22.1 2310055 17.7
[1] 500000500000
編集:例へのマイナーな変更