如何使用 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)
如何利用魔法点 (...) / 省略号根据任意列进行过滤?
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)