我想在 data.table
中运行回归分析。需要动态构建 formula
。我尝试了以下方法:
x = data.table(a=1:20, b=20:1, id=1:5)
> x[,as.list(coef(lm(as.formula("a ~ b")))),by=id]
Error in eval(expr, envir, enclos) : object 'a' not found
如何指定环境为数据表实际发生评估的环境?
编辑:我意识到我可以使用lm(a ~ b)。我需要使公式动态生成,因此它是作为字符串构建的。动态意味着公式可以是paste0(var_1, "~", var_2)
,其中var_1 = a
且var_2 = b
这里有一个解决方案,但我认为我们可以做得更好:
txt = parse(text="as.list(coef(lm(a ~ b)))")
> x[,eval(txt),by=id]
id (Intercept) b
1: 1 21 -1
2: 2 21 -1
3: 3 21 -1
4: 4 21 -1
5: 5 21 -1