оператор. Это очень мило.
вая рабочий процесс 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
вызов оценивается или нет