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
10
A
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
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