Я не совсем понимаю стремление к «чистому dplyr» решению, но вы можете облегчить любую проблему с помощью вспомогательных функций.Например, вы можете написать функцию для запуска преобразования, только если найдены определенные столбцы
run_if_cols_match <- function(data, cols, expr) {
if (any(names(data) %in% cols)) {
expr(data)
} else {
data
}
}
Затем вы можете использовать это в канале
diamonds_tbl_clean <- diamonds_tbl %>%
run_if_cols_match(initialColumnDrop,
. %>% select(-one_of(initialColumnDrop))) %>%
run_if_cols_match(forceCategoricalColumns,
. %>% mutate_at(forceCategoricalColumns,funs(as.character))) %>%
run_if_cols_match(forceNumericalColumns,
. %>% mutate_at(forceNumericalColumns,funs(as.numeric)))
, который будет делать то же самое, что иваш код.Вот только условно запускаются разные анонимные каналы.