Le formule sono una funzione molto utile delle funzioni statistiche e grafiche di R. Come tutti, sono un utente di queste funzioni. Tuttavia, non ho mai scritto una funzione che accetta un oggetto formula come argomento. Mi chiedevo se qualcuno potesse aiutarmi, sia collegando un'introduzione leggibile a questo lato della programmazione R, sia dando un esempio autonomo.Formule in funzioni definite dall'utente in R
10
A
risposta
6
È possibile utilizzare model.matrix()
e model.frame()
per valutare la formula:
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))
che produce
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
Grazie, molto interessante. Capisco anche perché glmnet oi suoi pacchetti potrebbero non offrire questa funzionalità: utilizza una matrice sparsa nel pacchetto Matrix, che non può essere trattato con model.matrix(). – gappy