According to this answer, you can use a text formula in data.table
set.seed(1)
foo = data.table(var1=sample(1:3,1000,r=T), var2=rnorm(1000), var3=sample(letters[1:5],1000,replace = T))
var_i="var1"
var_j="var1+0.02*exp(var2)"
var_by="var3"
eval_text_formula <- function(s, env) eval(parse(text=s), envir = env, enclos = parent.frame())
foo[var1 == 1, sum(eval_text_formula(var_j, .SD)), by = var3]
var3 V1
1: d 72.74060
2: e 77.10872
3: c 69.48776
4: b 84.22668
5: a 58.53409
I'd like extend this answering what's happen if I pass a formula object
var_j=as.formula("~var1+0.02*exp(var2)")
> foo[var1 == 1, sum(eval_text_formula(var_j, .SD)), by = var3]
Error in sum(eval_text_formula(var_j, .SD)) :
'type' (language) de argumento no vĂ¡lido
The sloppy and gross solution I found is reconvert the formula to string var_j=as.character(var_j)
.
> var_j=as.formula("~var1+0.02*exp(var2)")
> var_j=as.character(var_j)
> var_j
[1] "~" "var1 + 0.02 * exp(var2)"
> var_j=var_j[2]
> foo[var1 == 1, sum(eval_text_formula(var_j, .SD)), by = var3]
var3 V1
1: d 72.74060
2: e 77.10872
3: c 69.48776
4: b 84.22668
5: a 58.53409
I feel there is a concept I am missing.