2017-08-24 64 views
1

我正在使用數據表通過大量線性模型來關鍵,但我無法使用公式接口。 下面是一個例子:使用數據表的動態lm公式

require(data.table) 
dt <- data.table(grp = c(rep("a", 10), rep("b",10)), 
       x1 = rnorm(20), 
       x2 = rnorm(20), 
       y = rnorm(20)) 
n <- names(dt) 
modFormula <- paste0("y ~ ", paste0(n[!n %in% c("y", "grp")], collapse = "+")) 

#This gives me an error - Error in eval(expr, envir, enclos) : object 'y' not found 
results <- dt[, as.list(coef(lm(modFormula))), by = .(grp)] 

#This works but I ideally don't want to be typing out the variables manually 
results <- dt[, as.list(coef(lm(y~x1+x2))), by = .(grp)] 

如何可以動態傳遞在式/ X,Y變量?

我在成千上萬的模型中攪拌,這是迄今爲止我發現的最快的方法 - 任何其他暗示都歡迎。

回答

2

我們需要使用datalm

dt[, as.list(coef(lm(modFormula, data = .SD))), by = .(grp)] 
# grp (Intercept)   x1   x2 
#1: a 0.2185345 -0.7334866 -0.5986349 
#2: b 0.4499405 -0.5264809 0.1454797 

檢查與第二種方法

dt[, as.list(coef(lm(y~x1+x2))), by = .(grp)] 
# grp (Intercept)   x1   x2 
#1: a 0.2185345 -0.7334866 -0.5986349 
#2: b 0.4499405 -0.5264809 0.1454797 
輸出