Estou tentando formar dinamicamente uma fórmula para usar em dynlm
. Encontro um comportamento function
que não entendo, que pode ser visto neste código:
library(data.table)
dt_test <- data.table("a"=rnorm(10), "b"=1:5)
dt_test[, .(.(
formula("z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + tt + tt2")
)), .(b)]
Espera-se que o código acima produza fórmulas (idênticas) para cada valor de b
. Esta fórmula é incluída .(.(...))
para retornar uma lista, apenas para que ela possa ser armazenada corretamente em uma coluna do data.table original.
Entretanto, a fórmula retornada não corresponde à string fornecida originalmente, mas adiciona uma vírgula entre +
e tt
, como você pode ver na saída:
b V1
<int> <list>
1: 1 z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + , tt + tt2
2: 2 z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + , tt + tt2
3: 3 z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + , tt + tt2
4: 4 z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + , tt + tt2
5: 5 z_val ~ s_val + q_val + L(s_dval, 32:0) + L(q_dval, 2:0) + 1 + , tt + tt2
Basicamente, ele adiciona uma vírgula onde não há nenhuma. Ele faz isso até mesmo reorganizando os termos da soma, mas para de fazer isso se eu apagar q_val
, por exemplo. O mesmo vale para as.formula
.
Gostaria de entender o que está acontecendo e evitar isso.