2017-08-24 31 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 
输出