subset()
最初にデータフレーム内で言及したオブジェクトを探します。したがって、最初の例でSpecies[i]
は「setosa」(と同じiris$Species[i]
)を返します。指定したオブジェクトがデータフレーム内に見つからない場合にのみ、Rは親フレームを調べて、そこで正しいオブジェクトを見つけます。
だから、それはすべて機能します、あなたはそれがどのように機能するかを理解していないだけです。あなたはヘルプファイルでこれを読むことができたでしょう:
サブセットはデータフレームで評価されるため、列は式の変数として(名前で)参照できることに注意してください(例を参照)。
これはどのようにして起こりますか?
その理由は、次のコード行ですsubset()
。
e <- substitute(subset)
r <- eval(e, x, parent.frame())
subset
(またはe
)はあなたの例にありますSpecies == Species[i]
x
あなたの例にありますiris
parent.frame()
あなたの例では地球環境を返します。
の呼び出しの2番目の引数は、eval
とx
呼ばれenvir
ます。式が評価されるのは環境(またはリストまたはデータフレームなど)です。あなたの場合、RはデータフレームであるSpecies == Species[i]
insideを評価します。 x
3番目の引数、parent.frame()
はエンクロージャーです。これは、指定したデータフレームを囲む環境であり、変数がデータフレームに見つからない場合にRが検索する場所です。
も参照してください?eval