2011年5月14日土曜日

R言語のwith関数の調査

まずは導入ということで、attach関数について説明する。attach関数を利用すると、detach関数を呼び出すまで、データフレームの列名を書くだけで、列を指定したことと同じになる。

> attach(iris)
> lm.obj <- lm(Sepal.Length~Sepal.Width) # iris[,"Sepal.Length"]などとしなくてもよい
> detach(iris)
> Sepal.Length # エラー
 エラー:  オブジェクト 'Sepal.Length' がありません
> lm.obj

Call:
lm(formula = Sepal.Length ~ Sepal.Width)

Coefficients:
(Intercept)  Sepal.Width  
     6.5262      -0.2234  

次にwith関数の定義を示す。

with(data, expr, ...)

with関数はdataから構成された環境で評価するというものであるが、言い換えると、with関数の内部に限ってexprはattach(data)としたのと同じになるということである。つまり、上の回帰分析のコードは次のように書くこともできる。

> lm.obj2 <- with(iris,lm(Sepal.Length~Sepal.Width))
> all.equal(lm.obj,lm.obj2) # 回帰分析で得られたオブジェクトを比較、一致している
[1] TRUE

どちらを使うべきかという判断は難しいが、attach/detachを利用する場合は、attachしている最中にオブジェクト名を混同しないようにしなければならないことだけは間違いない。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計