2012-03-02 11 views
1

Rの環境について質問したい: 次の簡単なコードでは、ローカル変数 "v1"を作成します。 "environment(f1)"と入力すると、 "f1"が地球環境に置かれます。 私の質問は、Rコンソールから "v1" にアクセスする方法です。 "v1 $ f1"は機能しません。これについての説明はありますか?Rの環境

rm(list = ls()) 
f1 <- function() { 
    v1 <- 1 
} 
environment(f1) 

次に、 "LS(E1)を" 私は "E1"

e1 <- new.env() 

を環境を作成し、私が使用したとき、私は "E1"

environment(f1) <- e1 

内の "F1" を置けば私は "f1"を受け取っていない。なぜ誰が知っていますか?

ls(e1) 

ローカル変数v1あなたは機能f1を呼び出すまで存在していない、とするときf1終了し、それが住んでいる環境が一般的に破壊され、事前に

+0

うーん、私は通常、この種のもののために ''割り当てる(「F1」が、F1、ENVIR = E1)を使用していますが、 '?environment'は' environment(f1)< - e1'がうまくいくと示唆しています - なぜそうではないのか分かりません。 –

+0

'environment(f1)< - e1'は' f1'の囲み環境を設定します。つまり、独自のスコープ内で定義されていないオブジェクトを検索する場所です。 'f1'自体はその場所に存在する必要はありません。 –

答えて

3

、ありがとうございました。あなたがf1を変更した場合しかし、あなたはそれを手に入れることができます。

rm(list = ls()) 
f1 <- function() { 
    v1 <- 1 
    environment() # return the local environment 
} 

f1()$v1 

をあなたの2番目の質問について、あなたは、f1に周りにいない他の方法をe1を割り当て。だからf1は環境を持っていますe1それは物を探します。あなたはnew.envに親環境を指定した場合、それはものを探し続けるところ、それはです:

e1 <- new.env(parent=baseenv()) 
e1$foo <- 42 
bar <- 43 # Global variable, not found through e1 

f2 <- function() { 
    foo # Finds in e1 
    bar # Not found... 
} 

environment(f2) <- e1 
f2() # Error: object 'bar' not found 
ls(e1) # "foo" 
e1$f2 <- f2 
ls(e1) # "f2" "foo" 
+0

あなたは正しいです!それは非常に良い答えです! –

+0

...ありがとうございますが、右側の「関連」セクションもご覧ください。[r]の環境に関するQ&Aはたくさんあります。 – Tommy

関連する問題