criar uma fórmula em um ambiente data.table em R
Eu gostaria de executar uma regressão dentro de umdata.table
. oformula
precisa ser construído dinamicamente. Eu tentei o seguinte método:
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
Como se especifica o ambiente para ser aquele dos dados reais? Onde a avaliação ocorre?
EDIT: Eu percebo que posso fazer lm (a ~ b). Eu preciso que a fórmula seja dinâmica, então é construída como uma string de caracteres. Dinamicamente, quero dizer que a fórmula pode serpaste0(var_1, "~", var_2)
Ondevar_1 = a
evar_2 = b
Aqui está uma solução que acho que podemos fazer melhor:
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