88

誰かがこれを簡単な例で説明できれば助かりますか?

parent.frame()また、代わりに使用すると便利な場所がありparent.env()、その逆も同様です。

4

1 に答える 1

103

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"]]最初に を調べ、見つからない場合は の親を調べます。同様に、 で始まる代入を検索します。R での比較的新しい参照クラスの実装は、これらのアイデアに依存して、シンボル (インスタンス フィールドとメソッド) を見つけることができるインスタンス固有の環境を定義します。envenv<<-parent.env

于 2011-09-16T02:35:47.790 に答える