如何在ggbetweenstats中使用变量作为列名
ggbetweenstats使用变量作为列名的解决方案
ggbetweenstats属于ggstatsplot包,内部采用整洁求值机制,直接传入字符串变量或原生符号不会被识别为数据框内的列,需要使用对应的适配语法。
正确实现方式
场景1:变量存储的是列名字符串
也就是你当前 xField='Species' 的场景,使用.data代词索引即可生效:
xField <- 'Species' ggbetweenstats( data = iris, x = .data[[xField]], y = Sepal.Length, title = "Distribution of sepal length across Iris species" )
如果习惯用符号转换的写法,也可以搭配爆炸运算符!!实现:
xField <- 'Species' ggbetweenstats( data = iris, x = !!as.symbol(xField), y = Sepal.Length, title = "Distribution of sepal length across Iris species" )
场景2:需要把未加引号的列名作为参数传递
比如封装成自定义函数时,使用{{ }}(双大括号运算符)即可:
# 自定义绘图函数 plot_iris <- function(col_x) { ggbetweenstats( data = iris, x = {{ col_x }}, y = Sepal.Length, title = "Distribution of sepal length across Iris species" ) } # 调用时直接传入列名,不需要加引号 plot_iris(Species)
原有写法失效的原因
- 直接传
x = xField:函数会默认在iris数据框里寻找名为xField的列,而不会把xField作为变量读取它存储的字符串值 - 直接传
x = as.symbol(xField):旧版本ggstatsplot支持裸符号传参,新版本整洁求值规则下需要搭配爆炸运算符才能正确解析
内容的提问来源于stack exchange,提问作者SunWuKung
相关产品推荐
相关产品推荐

