Итак, я пытаюсь заняться программированием в dplyr, и у меня возникли проблемы с enquo и !!оценки.
По сути, я хотел бы преобразовать столбец в динамическое имя столбца, а затем иметь возможность дополнительно манипулировать этим столбцом (т. Е. Суммировать).Например:
my_function <- function(data, column) {
quo_column <- enquo(column)
new_col <- paste0(quo_column, "_adjusted")[2]
data %>%
mutate(!!new_col := (!!quo_column) + 1)
}
my_function(iris, Petal.Length)
Это прекрасно работает и возвращает столбец с именем "Petal.Length.adjusted", который просто Petal.Length, увеличенный на единицу.
Однако я не могу суммировать этот новый столбец.
my_function <- function(data, column) {
quo_column <- enquo(column)
new_col <- paste0(quo_column, "_adjusted")[2]
mean_col <- paste0(quo_column, "_meanAdjusted")[2]
data %>%
mutate(!!new_col := (!!quo_column) + 1) %>%
group_by(Species) %>%
summarize(!!mean_col := mean(!!new_col))
}
my_function(iris, Petal.Length)
Это приводит к предупреждению о том, что аргумент "Petal.Length_adjusted" не является числовым или логическим, хотя выходные данные вызова mutate дают числовой столбец.
Как мне ссылатьсяэто динамически генерируемое имя столбца для передачи его в дальнейшие функции dplyr?