Формулы в пользовательских функциях в R

Формулы являются очень полезной особенностью R статистических и графических функций. Как и все, я являюсь пользователем этих функций. Однако я никогда не писал функцию, которая принимает объект формулы в качестве аргумента. Мне было интересно, может ли кто-нибудь помочь мне, либо связавшись с читаемым введением в эту сторону программирования R, либо предоставив самодостаточный пример.

1 ответ

Вы можете использовать model.matrix() и model.frame() для вычисления формулы:

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

что дает

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

licensed under cc by-sa 3.0 with attribution.