Как использовать гибкий фильтр с несколькими аргументами в пользовательской функции dplyr - PullRequest
0 голосов
/ 12 декабря 2018

В крайнем случае, я могу передать любое количество аргументов для фильтрации, используя «...», но я обнаружил, что «...» скрывает намерение формального аргумента внутри функции, и это может запутать новые или случайныепользователи.

Например, эта функция работает, но я бы предпочел, чтобы "..." было названо 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...