2009-08-19 4 views
10

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

ответ

6

Вы можете использовать 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 
+1

Спасибо, очень интересно. Я также понимаю, почему пакеты glmnet или ther могут не предлагать эту возможность: он использует разреженную матрицу в пакете Matrix, который не может обрабатываться с помощью model.matrix(). – gappy

 Смежные вопросы

  • Нет связанных вопросов^_^