2009-08-19 14 views
10

Las fórmulas son una característica muy útil de las funciones estadísticas y gráficas de R. Como todos, soy un usuario de estas funciones. Sin embargo, nunca he escrito una función que tome un objeto de fórmula como argumento. Me preguntaba si alguien podría ayudarme, bien vinculándome con una introducción legible a este lado de la programación R o dando un ejemplo autónomo.Fórmulas en funciones definidas por el usuario en R

Respuesta

6

Puede utilizar model.matrix() y model.frame() para evaluar la fórmula:

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

que 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 
+1

Gracias, muy interesante. También entiendo por qué los paquetes glmnet o ther pueden no ofrecer esta capacidad: usa matriz dispersa en el paquete Matrix, que no se puede tratar con model.matrix(). – gappy

Cuestiones relacionadas