所以我正在尝试在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函数?
答案 0 :(得分:10)
与quo_column
quosure
不同,new_col
和mean_col
是字符串,因此我们使用sym
将其转换为符号(来自{{ 1}})然后进行评估
rlang