我正在尝试编写一个函数,用户将在其中指定数据框和列名(字符串)并将字符串传递给dplyr
filter
函数。
我相信我应该使用filter_
,但我似乎无法让它按预期运行。
考虑下面的数据框data
。如果我想将它通过管道传输到 NSE 版本,filter
则完成如下所示
data <- data.frame(column1 = c(-1:10))
data %>% filter(column1 >= 0)
# column1
# 1 0
# 2 1
# 3 2
# 4 3
# 5 4
# 6 5
# 7 6
# 8 7
# 9 8
# 10 9
# 11 10
但是,当我尝试在函数中实现它时,过滤器似乎被忽略,如下所示。
filter_fn <- function(d_in,column){
criteria <- interp(~ as.name(column) >= 0)
d_out = d_in %>% filter_(criteria)
return(d_out)
}
filter_fn(data, "column1")
# column1
# 1 -1
# 2 0
# 3 1
# 4 2
# 5 3
# 6 4
# 7 5
# 8 6
# 9 7
# 10 8
# 11 9
# 12 10
这不是通过函数传递参数的细微差别,因为返回的结果完全相同。
data %>% filter_(interp(~ as.name(column) >= 0))
问题:如何编写具有所需参数的函数来过滤数据帧dplyr
?