Пример
Я хочу написать функцию, которая выполняет следующее:
filter_and_compute <- function(df,
condition,
col_to_modify,
calculus) {
df %>%
filter( condition ) %>%
mutate( col_to_modify = calculus ) %>%
rbind(df %>% filter(! condition))
}
Но вызывается со строками в качестве аргументов (кроме df
):
filter_and_compute(mtcars, "cyl == 4", "mpg", "2 * hp")
Что я сделал
Я сделал эту версию, но она бесполезна, потому что я манипулирую именами столбцов как строками:
filter_and_compute <- function(df,
filter_condition,
column_to_modify,
calculus) {
enq_filter <- enquo(filter_condition)
enq_col_to_mod <- enquo(column_to_modify)
enq_calculus <- enquo(calculus)
(
df
%>% filter(!! enq_filter)
%>% mutate(!! enq_col_to_mod := !! enq_calculus)
%>% rbind( df %>% filter( ! (!! enq_filter)))
)
}
filter_and_compute(mtcars, cyl == 4, mpg, 2 * cyl + hp)
Мне известно о rlang::sym
, но я не могу понять, как использовать его с непредсказуемыми выражениями, такими как 2 * cyl + hp
...