20

内で回帰を実行したいと思います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 = aにある可能性があることを意味しますvar_2 = b

これは、私たちがもっとうまくできると思う解決策の1つです。

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
4

1 に答える 1

16

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
于 2013-02-09T03:19:01.090 に答える