我正试图在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 函数中传递它?