2009-08-19 24 views
10

です。数式は、Rの統計関数とグラフ関数の非常に便利な機能です。みんなと同じように、私はこれらの機能のユーザーです。しかし、私は決して数式オブジェクトを引数とする関数を書いたことはありません。私は誰かが私を助けることができるかどうか、Rプログラミングのこの側面への読解可能な紹介へのリンク、または自己完結型の例の提供によって疑問に思っていました。ユーザー定義関数の式はR

答えて

6

あなたは式を評価するためにmodel.matrix()model.frame()を使用することができます。

lm1 <- lm(log(Volume) ~ log(Girth) + log(Height), data=trees) 
print(lm1) 

form <- log(Volume) ~ log(Girth) + log(Height) 

# use model.matrix 
mm <- model.matrix(form, trees) 
lm2 <- lm.fit(as.matrix(mm), log(trees[,"Volume"])) 
print(coefficients(lm2)) 

# use model.frame, need to add intercept by hand 
mf <- model.frame(form, trees) 
lm3 <- lm.fit(as.matrix(data.frame("Intercept"=1, mf[,-1])), mf[,1]) 
print(coefficients(lm3)) 

Call: lm(formula = log(Volume) ~ log(Girth) + log(Height), data = trees) 

Coefficients: (Intercept) log(Girth) log(Height) 
     -6.63   1.98   1.12 

(Intercept) log(Girth) log(Height) 
    -6.632  1.983  1.117 
Intercept log.Girth. log.Height. 
    -6.632  1.983  1.117 
+1

おかげで、非常に興味深いが得られています。私はglmnetやtherパッケージがなぜこの機能を提供しないのかも理解しています。package Matrixでは疎な行列を使いますが、これはmodel.matrix()で扱われないかもしれません。 – gappy

関連する問題