如何在R的ggpubr::ggboxplot中使用含特殊字符的列名?
在R的
ggpubr::ggboxplot中使用含特殊字符的列名(如len/s)的解决方法 问题背景
当使用包含/、%这类特殊字符的字符串作为数据框列名时,调用ggpubr::ggboxplot会触发报错——根源是ggpubr内部通过purrr::map调用parse()解析列名字符串时,特殊字符不符合R的语法规则,导致解析失败。
报错原因
ggpubr会将传入的x、y、color等参数当作R表达式去解析,但像len/s、dose%sd这类含特殊字符的列名,本身不是合法的R表达式,因此parse()函数抛出错误。
解决方法
方法1:给列名字符串包裹反引号
在传入列名参数时,给字符串加上反引号,让parse()将其识别为合法的变量名(R允许用反引号包裹含特殊字符的变量名):
library(ggpubr) data("ToothGrowth") df <- ToothGrowth colnames(df) <- c("len/s", "supp", "dose%sd") ggboxplot(df, x = "`dose%sd`", y = "`len/s`", color = "`dose%sd`", palette = c("#00AFBB", "#E7B800", "#FC4E07"), add = "jitter", shape = "`dose%sd`")
方法2:直接传入ggplot2的aes映射对象
跳过ggpubr的表达式解析步骤,直接使用ggplot2的语法创建映射,它原生支持带反引号的特殊列名:
library(ggpubr) data("ToothGrowth") df <- ToothGrowth colnames(df) <- c("len/s", "supp", "dose%sd") ggboxplot(df, mapping = aes(x = `dose%sd`, y = `len/s`, color = `dose%sd`, shape = `dose%sd`), palette = c("#00AFBB", "#E7B800", "#FC4E07"), add = "jitter")
内容的提问来源于stack exchange,提问作者Zhilong Jia
相关产品推荐
相关产品推荐

