2017-03-18 7 views
0

以下の例を見て、私は変数保持者を地球環境に割り当てました。しかし、私は所有者をmake.var()のローカル環境に専属割り当てたいと思っています。どうすればいいですか?関数の親環境変数を代入する

make.var<-function(){ 
    holder<<-rep(NA,10) #assigns global 
} 

test<-function(){ 
    make.var() 
} 

EDIT:「親環境」とは対照的に「呼び出し環境」と呼ばれることが多いと思います。

+0

あなたは 'assign'をチェックアウトすることができ - おそらく "POS = parent.frame()" に?。なぜあなたは、単純に、 'make.var'を必要な場所に割り当てることができる値を返すようにしますか? –

+0

@alexis_laz私はそれを見ていきます。私は基本的に多くの変数を割り当てる(開始する)必要があります。私はこれらの変数のリストを返すと面倒になると思います。 1ライナーで親環境にすべて割り当てられた方が簡単です。 –

+0

リストを返し、list2env()を使用します。 – Sathish

答えて

1

あなたは(あなたがリストと同じように)parent.frameを使用して、呼び出し元の環境を取得する(parent.envと混同しないでください)と$または[[を使用して、それに変数を割り当てることができます。 assignを使用することもできます。

など。

rm(list = ls()) 
`%<-1%` <- function(x, y) { p <- parent.frame() ; p[[deparse(substitute(x))]] <- y } 
`%<-2%` <- function(x, y) { assign(deparse(substitute(x)), y, env = parent.frame())} 

そして:

ls() 
a1 %<-1% 111 
ls() 
a2 %<-2% 222 
ls() 
a1 ; a2 
test1 <- function(x) { print(ls()); t %<-1% x; print(ls()); t } 
test2 <- function(x) { print(ls()); t %<-2% x; print(ls()); t } 
ls() 
test1(333) 
ls() 
test2(444) 
ls()