在R中的data.table环境中创建公式

在R中的data.table环境中创建公式,r,environment,data.table,R,Environment,Data.table,我想在data.table中运行回归。公式需要动态构造。我尝试过以下方法: 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 如何将环境指定为进行评估的实际data.table的环境 编辑:我意识到我可以做lma~b。我需要的公式是动态的,所

我想在data.table中运行回归。公式需要动态构造。我尝试过以下方法:

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
如何将环境指定为进行评估的实际data.table的环境

编辑:我意识到我可以做lma~b。我需要的公式是动态的,所以它作为一个字符串建立起来。我的意思是,公式可以是paste0var_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
lm可以接受字符串作为公式,因此将其与.SD组合如下:

> x[, as.list(coef(lm("a ~ b", .SD))), 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

我认为这只是一个复制品。还没有投票结束,因为我认为您需要更好地解释和说明动态构建的含义。will通读了一遍,没有看到那个,但我不认为它是重复的。特别是如何在实际数据表中处理环境?好主意!我都没想过。你能详细说明一下如何在实际的data.table中获得环境句柄吗?@Alex,试试这个:x[,{e