如何编写ggplot2函数:以字符串参数传入tibble列名绘图
问题修复方案
错误原因很明确:你用.data$x_axis时,ggplot会直接把x_axis当成列名去数据里查找,而不是取你传入的x_axis变量中存储的字符串对应的列,所以才会提示找不到名为x_axis的列。
下面是两种适配字符串参数的修正方案:
方案一:使用.data[[ ]]索引(推荐)
.data[[ ]]可以接受字符串变量,动态提取对应列,代码修改如下:
plot_data <- function(data_tbl, x_axis, y_axis) { ggplot( data = data_tbl, mapping = aes(x = .data[[x_axis]], y = .data[[y_axis]]) ) + geom_point() + geom_smooth() }
方案二:使用符号求值(rlang包)
通过sym()把字符串转成ggplot能识别的符号,再用!!注入到美学映射中:
library(rlang) plot_data <- function(data_tbl, x_axis, y_axis) { ggplot( data = data_tbl, mapping = aes(x = !!sym(x_axis), y = !!sym(y_axis)) ) + geom_point() + geom_smooth() }
补充:适配非字符串参数的写法
如果后续你想直接传变量名(不用加引号),可以用{{}}(准引用)简化代码:
plot_data <- function(data_tbl, x_axis, y_axis) { ggplot( data = data_tbl, mapping = aes(x = {{x_axis}}, y = {{y_axis}}) ) + geom_point() + geom_smooth() } # 调用示例:plot_data(tbl_name, var1, var2)
内容的提问来源于stack exchange,提问作者SPAMINACAN
相关产品推荐
相关产品推荐

