6

私はRのルックアップメカニズムに少し混乱しています。次のコードがある場合

# create chain of empty environments
e1 <- new.env()
e2 <- new.env(parent=e1)
e3 <- new.env(parent=e2)

# set key/value pairs
e1[["x"]] <- 1
e2[["x"]] <- 2

次に、環境e3で「x」を検索すると「2」になると予想されます。私がそうすればこれはうまくいく

> get(x="x", envir=e3)
[1] 2

しかし、私が使用する場合はそうではありません

> e3[["x"]]
NULL

誰かが違いを説明できますか?のようだ

e3[["x"]]

糖衣構文だけではありません

get(x="x", envir=e3)


よろしくお願いします、
スヴェン

4

1 に答える 1

9

これらの機能は異なります。

get環境内のオブジェクトと、それを囲むフレーム(デフォルト)の検索を実行します。

差出人?get

この関数は、指定された環境で名前xに値がバインドされているかどうかを確認します。継承がTRUEであり、指定された環境でxの値が見つからない場合、名前xが検出されるまで、環境の囲んでいるフレームが検索されます。環境とそのエンクロージャーの構造の詳細については、環境と「R言語定義」マニュアルを参照してください。

対照的に、[デフォルトでは、オペレーターは囲んでいる環境を検索しません。

差出人?'['

$と[[の両方を環境に適用できます。文字インデックスのみが許可され、部分一致は行われません。これらの操作のセマンティクスは、のセマンティクスですget(i, env=x, inherits=FALSE)

于 2012-04-23T08:11:59.580 に答える