抓住这个。假设我正在探索汽车数据集
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
答案 0 :(得分:2)
为了使你的功能有效,它应该是这样的:
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