В крайнем случае, я могу передать любое количество аргументов для фильтрации, используя «...», но я обнаружил, что «...» скрывает намерение формального аргумента внутри функции, и это может запутать новые или случайныепользователи.
Например, эта функция работает, но я бы предпочел, чтобы "..." было названо filters
, как во втором примере (который не работает):
library(dplyr)
flex_filter <- function(data, ...){
data %>%
dplyr::filter(...)
}
mtcars %>% flex_filter(mpg < 25, am == 1)
В идеале моя функция должна выглядеть примерно так.Я понимаю, что enquos () не подходит для передачи логических аргументов, но это в духе того, что я пытаюсь сделать.
flex_filter <- function(data, filters){
filters <- dplyr::enquos(filters)
data %>%
dplyr::filter(!!!filters)
}
mtcars %>% flex_filter(filters = c(mpg < 25, am == 1))