You need to enable JavaScript to run this app. 如何使用tidyevaluate将对象名转为字符串以向绘图函数传递列名
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 23:36:03