首页 > 解决方案 > 如何在函数中使用 char 变量来过滤 data.table 中的列?

问题描述

我应该如何使用 char 变量来过滤书面函数中的选定列?

library("data.table")

data = data.table(val = c(NA, 1, 2, 3, 4, 5))

dataFun = function(dt, number) {
   colname = paste0("value_", number)
   dt = dt[, (colname) := val + number]
   # the lines below do not work
   dt[is.na(colname), colname] = 0
   dt[colname < 3, colname] = 3
   dt[colname > 5, colname] = 5
   return(dt)
}

data = dataFun(data, 1)

标签: rdata.table

解决方案


我们可以在转换为符号后指定colnamein.SDcols或 can uateeval

dataFun <- function(dt, number) {
   colname <- paste0("value_", number)
   dt <- dt[, (colname) := val + number]
   colnm <- as.name(colname)
   dt[is.na(eval(colnm)), (colname)  := 0
          ][eval(colnm) < 3, (colname) := 3
           ][eval(colnm) > 5, (colname) := 5][]


 }

dataFun(data, 1)
#   val value_1
#1:  NA       3
#2:   1       3
#3:   2       3
#4:   3       4
#5:   4       5
#6:   5       5

推荐阅读