如何使用 NSE 并使用 ...(省略号)过滤表达式?

How can I use NSE and filter an expression using ... (ellipsis)?

如何利用魔法点 (...) / 省略号根据任意列进行过滤?

df = tibble::tibble(col1 = c('a', 'b', 'c'), col2 = c(1,3,4))

my_func = function(x, ...){
  df %>%
    dplyr::filter(... == x)
}

my_func('a', col1)


# Should return:
# A tibble: 1 x 2
  col1   col2
  <chr> <dbl>
1 a         1

我们可以转换为正数 (quo) 并求值 (!!)。在这里,我们假设只有一个列传递到 filter

my_func <- function(x, ...){
   df %>%
      dplyr::filter(!! quo(...) == x)
  }



my_func('a', col1)
# A tibble: 1 x 2
#  col1   col2
#  <chr> <dbl>
#1 a         1

如果有多个列,那么使用filter_at

可能会更好

如果我们可以作为参数传递而不是 ...

,那么使用 {{}} 可能会更好
my_func <- function(x, coln) {
        df %>%
              filter({{coln}} == x)
    }
my_func('a', col1)