Сначала я думаю, что вы должны использовать with=FALSE
, чтобы включить data.frame
-подобный синтаксис для работы с data.table
объектами.
ris_df[, eval(v), with = FALSE] <- as.numeric(gsub(',', '', ris_df[, eval(v), with = FALSE]))
Во-вторых, проверьте, что вывод от gsub(',', '', dt[, eval(v), with=F])
library(data.table)
test <- rep("1,000",10)
dt <- data.table(test)
v <- "test"
dt[, v, with=FALSE] <- as.numeric(gsub(',', '', dt[, eval(v), with=F]))
> gsub(',', '', dt[, eval(v), with=F])
[1] "c(\"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\" \"1000\")"
Как видите, он возвращает только одну большую строку! Это может быть поведение data.table
, поскольку оно хорошо работает для data.frame
объектов
df <-data.frame(dt, stringsAsFactors = F)
> as.numeric(gsub(',', '',df[, eval(v)]))
[1] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000