2011-09-16 17 views

答えて

88

parent.envは、クロージャ(関数など)が定義されている環境です。 parent.frameは、クロージャが呼び出された環境です。

f = function() 
    c(f=environment(), defined_in=parent.env(environment()), 
     called_from=parent.frame()) 
g = function() 
    c(g=environment(), f()) 

、その後

> g() 
$g 
<environment: 0x14060e8> 

$f 
<environment: 0x1405f28> 

$defined_in 
<environment: R_GlobalEnv> 

$called_from 
<environment: 0x14060e8> 

私はただの死を免れがこれまで実際にそれらを使用したい時にわからないんだけど、概念は、ここで

> f = function() x 
> g = function() { x = 2; f() } 
> h = function() { x = 3; function() x } 
> x = 1 
> f() 
[1] 1 
> g() 
[1] 1 
> h()() 
[1] 3 

レキシカルスコープを理解する上で役立ちますまたはRの導入の謎めいた「銀行口座」の例で説明しています。?parent.frameの詳細セクションの最初の段落は、事柄を明確にするかもしれません。

環境はRで広く使用されています。たとえば、search()パスは、兄弟 - >親関係でチェーンされた(大体の)環境です。シンボルのルックアップを回避するためにenv = new.env(parent=emptyenv())が表示されることがあります。通常はenv[["x"]]env、次に見つからない場合はenvになります。同様に、<<-parent.envで始まる割り当てを探します。 Rの比較的新しい参照クラスの実装は、これらの考え方に基づいてシンボル(インスタンスフィールドとメソッド)が見つかるインスタンス固有の環境を定義します。

関連する問題