使用变量计算data.table中的列

我正在尝试计算data.table中的列,其中计算通过变量传递.以下内容与我要实现的内容相同:

dt <- data.table(mpg)
dt[, list(manufacturer, model, mpg_cyl_cty=cty/cyl, mpg_cyl_hwy=hwy/cyl)]

我想要的地方mpg_cyl_cty = cty / cyl,mpg_cyl_hwy = hwy / cyl来自一个变量,如:

var <- c('mpg_cyl_cty=cty/cyl', 'mpg_cyl_hwy=hwy/cyl')
dt[, list(manufacturer, model, var)]

我想这有更多的问题因为应该分配什么类型的var(c或list)以及如何通过list或c调用dt.

希望有人有一个建议,因为我在WWW上找不到任何东西.

最佳答案

library(ggplot2)
library(data.table)

dt <- data.table(mpg)
# The original calculation
dt1 <- dt[, list(manufacturer, model, mpg_cyl_cty=cty/cyl, mpg_cyl_hwy=hwy/cyl)]

var <- c('mpg_cyl_cty=cty/cyl', 'mpg_cyl_hwy=hwy/cyl')
# create a string to pass for evaluation
expr <- paste0("`:=`(", paste0(var, collapse = ", "), ")")

dt2 <- dt[, 
          .(manufacturer, model, cty, cyl, hwy)
         ][, eval(parse(text = expr))        # evaluate the expression
         ][, c("cty", "cyl", "hwy") := NULL] # delete unnecessary columns

> print(all.equal(dt1, dt2))
[1] TRUE
点赞