如何利用魔术点 (...) / 省略号来过滤任意列?
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
Run Code Online (Sandbox Code Playgroud)
我们可以转换为 quosure ( 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
Run Code Online (Sandbox Code Playgroud)
如果有多个列,那么最好使用 filter_at
这可能是也更好地利用{{}}
,如果我们可以作为参数传递,而不是...
my_func <- function(x, coln) {
df %>%
filter({{coln}} == x)
}
my_func('a', col1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
81 次 |
最近记录: |