在这上面挠头。假设我正在探索汽车数据集
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/