如何使用变量来子集数据表

ds_*_*ner 5 r data.table

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

data(mtcars)
test_dt <- as.data.table(mtcars)
Run Code Online (Sandbox Code Playgroud)

我可以使用以下类似方法轻松地将表子集化:

new_dt <- test_dt[cyl == '4', c('disp', 'hp', 'gear')]
Run Code Online (Sandbox Code Playgroud)

我得到11行数据。现在,假设我要创建一个函数,在该函数中,我将要过滤的列的名称与过滤器的值一起传递,以便可以创建所需数据的任意组合。像这样:

foo <- function(colToFilter, filterValue) {
  new_dt <- test_dt[colToFilter == filterValue, c('disp', 'hp', 'gear')]
  return(new_dt)
}
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

new_dt <- foo('cyl', '4')
Run Code Online (Sandbox Code Playgroud)

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

Lyz*_*deR 5

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

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)
}
Run Code Online (Sandbox Code Playgroud)

出去:

 > 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
Run Code Online (Sandbox Code Playgroud)