在这上面挠头。假设我正在探索汽车数据集

data(mtcars)
test_dt <- as.data.table(mtcars)

我可以使用以下类似方法轻松地将表子集化:
new_dt <- test_dt[cyl == '4', c('disp', 'hp', 'gear')]

我得到11行数据。现在假设我要创建一个函数,其中我将要过滤的列的名称与过滤器的值一起传递,以便可以创建所需的数据的任意组合。像这样的东西:
foo <- function(colToFilter, filterValue) {
  new_dt <- test_dt[colToFilter == filterValue, c('disp', 'hp', 'gear')]
  return(new_dt)
}

并这样称呼它:
new_dt <- foo('cyl', '4')

该函数不会引发错误,但会返回0行。如何修复函数,以便可以像以前一样返回11行? TIA

最佳答案

为了使您的功能正常工作,它应该像这样:

foo <- function(colToFilter, filterValue) {
 #you need get in order to 'get' the column named cyl
 new_dt <- test_dt[get(colToFilter) == filterValue, list(disp, hp, gear)]
 return(new_dt)
}

出去:
 > foo('cyl', '4')
     disp  hp gear
 1: 108.0  93    4
 2: 146.7  62    4
 3: 140.8  95    4
 4:  78.7  66    4
 5:  75.7  52    4
 6:  71.1  65    4
 7: 120.1  97    3
 8:  79.0  66    4
 9: 120.3  91    5
10:  95.1 113    5
11: 121.0 109    4

关于r - 如何使用变量对data.table进行子集化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44080053/

10-10 07:43