【问题标题】:create a formula in a data.table environment in R在 R 中的 data.table 环境中创建公式
【发布时间】:2013-01-24 21:30:53
【问题描述】:

我想在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

如何将环境指定为进行评估的实际 data.table 的环境?

编辑:我意识到我可以做 lm(a ~ b)。我需要公式是动态的,因此它被构建为字符串。动态我的意思是公式可以是paste0(var_1, "~", var_2) 其中var_1 = avar_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

【问题讨论】:

  • 我认为这只是 stackoverflow.com/questions/14721592/… 的副本。尚未投票结束,因为我认为您需要更好地解释和说明“动态构建”的含义。
  • 将通读,没看到那个,但我不认为它是重复的。特别是如何在实际 data.table 中处理环境?

标签: r environment data.table


【解决方案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

【讨论】:

  • 好主意!甚至没有考虑到这一点。您能否详细说明如何在实际 data.table 中获取环境句柄?
  • @Alex,试试这个:x[, {e <- environment(); e$a} ]
猜你喜欢
  • 2012-12-10
  • 2019-09-01
  • 2015-06-25
  • 2023-03-06
  • 2021-10-25
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
相关资源
最近更新 更多