оператор. Это очень мило.

вая рабочий процесс dplyr:

require(dplyr)                                      
mtcars %>% 
    tibble::rownames_to_column(var = "model") %>% 
    filter(grepl(x = model, pattern = "Merc")) %>% 
    group_by(am) %>% 
    summarise(meanMPG = mean(mpg))

Я заинтересован в условном примененииfilter в зависимости от стоимостиapplyFilter.

Решение

ЗаapplyFilter <- 1 строки фильтруются с использованием"Merc" строка, без фильтравсе строки возвращаются.

applyFilter <- 1


mtcars %>%
  tibble::rownames_to_column(var = "model") %>%
  filter(model %in%
           if (applyFilter) {
             rownames(mtcars)[grepl(x = rownames(mtcars), pattern = "Merc")]
           } else
           {
             rownames(mtcars)
           }) %>%
  group_by(am) %>%
  summarise(meanMPG = mean(mpg))
проблема

Предложенное решение неэффективно, так какifelse вызов всегда оценивается; более желательный подход оценил бы толькоfilter шаг дляapplyFilter <- 1.

попытка

неэффективный рабочее решение будет выглядеть так:

mtcars %>% 
    tibble::rownames_to_column(var = "model") %>% 
    # Only apply filter step if condition is met
    if (applyFilter) { 
        filter(grepl(x = model, pattern = "Merc"))
        }
    %>% 
    # Continue 
    group_by(am) %>% 
    summarise(meanMPG = mean(mpg))

Естественно, синтаксис выше неверен. Это только иллюстрация того, как должен выглядеть идеальный рабочий процесс.

Желаемый ответ

Я не заинтересован в создании временного объекта; рабочий процесс должен напоминать:

startingObject
    %>%
    ...
    conditional filter
    ...
    final object

В идеале я хотел бы прийти к решению, где я могу контролироватьfilter вызов оценивается или нет

Ответы на вопрос(1)

Ваш ответ на вопрос