2009-08-19 13 views
10

Formuły są bardzo przydatną funkcją funkcji statystycznych i graficznych R. Tak jak wszyscy, jestem użytkownikiem tych funkcji. Jednak nigdy nie napisałem funkcji, która przyjmuje obiekt formuły jako argument. Zastanawiałem się, czy ktoś może mi pomóc, albo łącząc się z czytelnym wprowadzeniem do tej strony programowania R, albo dając samodzielny przykład.Formuły w funkcjach zdefiniowanych przez użytkownika w R

Odpowiedz

6

Można użyć model.matrix() i model.frame() ocenić wzoru:

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)) 

który daje

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

Dzięki, bardzo ciekawe. Rozumiem również, dlaczego pakiety glmnet lub ther mogą nie oferować tej możliwości: używa ona rzadkiej macierzy w pakiecie Matrix, która nie może być traktowana za pomocą metody model.matrix(). – gappy

Powiązane problemy