Создать формулу в среде data.table в R
Я хотел бы запустить регрессию в 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
Как определить среду как таковую на фактической таблице данных, где происходит оценка?
EDIT: Я понимаю, что могу сделать lm (a ~ b). Мне нужна формула, чтобы быть динамичной, поэтому она создавалась как символьная строка. Динамически я имею в виду, что формула может быть paste0(var_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
Ответы
Ответ 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