R语言ggplot自定义绘图函数传入变量名参数报错问题求解
问题原因
你遇到的是tidyverse非标准评估的典型问题:函数内直接写参数名vari时,dplyr和ggplot会将其识别为传入的字符串常量,而非数据集中对应名称的列。
修复方案(适配你当前传字符串参数的调用方式)
直接用.data[[参数名]]读取字符串对应的列,修正后的函数如下:
plot_var_aantal<-function(vari){ MASTERDATA%>% group_by(COMPANY)%>% summarize(AMOUNT_COMP = sum(AMOUNT, na.rm=TRUE), Type=Type, x_col = .data[[vari]])%>% filter(!is.na(Type)) %>% ggplot(aes(x = x_col, y = AMOUNT_COMP ), na.rm = TRUE)+ geom_point()+ labs(x = vari) + # 保持x轴名称和传入的变量名一致 facet_wrap(~Type,nrow=4) }
修正后直接调用plot_var_aantal("people")即可正常读取对应列的数值绘图。
可选扩展:支持无引号传列名
如果你希望调用时不用加引号,直接写列名(比如plot_var_aantal(COMP_VAR1)),可以用tidyverse的卷曲运算符{{ }}实现:
library(rlang) plot_var_aantal<-function(vari){ MASTERDATA%>% group_by(COMPANY)%>% summarize(AMOUNT_COMP = sum(AMOUNT, na.rm=TRUE), Type=Type, x_col = {{ vari }})%>% filter(!is.na(Type)) %>% ggplot(aes(x = x_col, y = AMOUNT_COMP ), na.rm = TRUE)+ geom_point()+ labs(x = as_name(enquo(vari))) + facet_wrap(~Type,nrow=4) }
内容的提问来源于stack exchange,提问作者Josse_
相关产品推荐
相关产品推荐

