dplyr过滤器的标准评估版似乎被忽略了

时间:2016-05-31 05:57:52

标签: r dplyr lazy-evaluation piping standard-evaluation

我正在尝试编写一个用户将指定数据框和a的函数 列名(字符串)并将字符串传递给dplyr filter函数。

我确信我应该使用filter_,但我似乎无法让它按预期行事。

考虑下面的数据框data。如果我想将它传递给filter的NSE版本,则完成如下所示

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过滤数据框?

0 个答案:

没有答案