2009-08-19 9 views
10

Les formules sont une fonctionnalité très utile des fonctions statistiques et graphiques de R. Comme tout le monde, je suis un utilisateur de ces fonctions. Cependant, je n'ai jamais écrit une fonction qui prend un objet de formule comme argument. Je me demandais si quelqu'un pouvait m'aider, soit en liant à une introduction lisible de ce côté de la programmation R, soit en donnant un exemple autonome.Formules dans des fonctions définies par l'utilisateur dans R

Répondre

6

Vous pouvez utiliser model.matrix() et model.frame() pour évaluer la formule:

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

qui donne

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

Merci, très intéressant. Je comprends aussi pourquoi les paquets glmnet ou ther peuvent ne pas offrir cette capacité: il utilise une matrice fragmentée dans le paquet Matrix, qui ne peut pas être traitée avec model.matrix(). – gappy

Questions connexes