r - tables - style datatable shiny
crear una fórmula en un entorno data.table en R (1)
Me gustaría ejecutar una regresión dentro de una data.table
. La formula
necesita ser construida dinámicamente. He intentado el siguiente 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
¿Cómo se especifica que el entorno sea el de la tabla de datos reales donde se realiza la evaluación?
EDITAR: Me doy cuenta de que puedo hacer lm (a ~ b). Necesito que la fórmula sea dinámica para que se construya como una cadena de caracteres. Por dinámica me refiero a que la fórmula puede ser paste0(var_1, "~", var_2)
donde var_1 = a
y var_2 = b
Aquí hay una solución que creo que podemos hacer mejor:
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
puede aceptar una cadena de caracteres como la fórmula, así que .SD
con .SD
esta manera:
> 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