2009-08-19 37 views
10

Công thức là một tính năng rất hữu ích của các hàm thống kê và đồ họa của R. Giống như tất cả mọi người, tôi là một người sử dụng các chức năng này. Tuy nhiên, tôi chưa bao giờ viết một hàm nhận một đối tượng công thức làm đối số. Tôi đã tự hỏi nếu có ai đó có thể giúp tôi, bằng cách liên kết với một giới thiệu có thể đọc được về phía lập trình R này, hoặc bằng cách đưa ra một ví dụ độc lập.Công thức trong các hàm do người dùng định nghĩa trong R

Trả lời

6

Bạn có thể sử dụng model.matrix()model.frame() để đánh giá công thức:

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

trong đó sản lượng

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

Cảm ơn, rất thú vị. Tôi cũng hiểu tại sao các gói glmnet hoặc ther có thể không cung cấp khả năng này: nó sử dụng ma trận thưa thớt trong Ma trận gói, có thể không được xử lý với model.matrix(). – gappy

Các vấn đề liên quan