如何使用tidyevaluate将对象名转为字符串以向绘图函数传递列名
你只需要将enquo()捕获的quosure对象转为字符串即可,rlang包提供的as_name()函数可以直接完成这个转换,修改后的可运行代码如下:
library(rlang) library(dplyr) library(ggpubr) # 提前自定义调色板 custom_pal <- c("#2E9FDF", "#E7B800", "#FC4E07") create_plot <- function(df, group, subgroup, y){ var_group <- enquo(group) var_subgroup <- enquo(subgroup) var_y <- enquo(y) # 将quosure转为字符串形式的列名 str_group <- as_name(var_group) str_subgroup <- as_name(var_subgroup) str_y <- as_name(var_y) df %>% select(!!var_group, !!var_subgroup, !!var_y) %>% mutate(!!var_group := as.factor(!!var_group), !!var_subgroup := as.factor(!!var_subgroup)) %>% ggsummarystats(., x = str_subgroup, y = str_y, palette = custom_pal, ggfunc = ggboxplot, fill = str_group, color = str_group, summaries = c("n", "mean")) } # 测试调用(mtcars数据集) create_plot(mtcars, gear, carb, mpg) # 测试调用(sales数据集) # create_plot(sales, YEAR, COUNTRY, VALUE)
如果你使用的rlang版本较低,也可以用quo_name()替换as_name(),二者在该场景下效果完全一致。
内容的提问来源于stack exchange,提问作者MesRot
相关产品推荐
相关产品推荐

