ggarrange使用expression函数报错:无法将expression转为data.frame
问题分析与解决方案
这个报错属于参数类型不匹配的编程问题,不是expression()函数本身不能用,而是你没踩中ggpubr::ggarrange()的参数规则:
报错核心原因
ggarrange()的labels参数并不支持直接传入expression()生成的对象。该参数期望接收字符向量、或可转换为简单文本的类型,但你传入的expression()对象属于特殊的表达式类,函数内部尝试将其转换为数据框时直接触发了类型转换失败,也就是你看到的:
Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""expression"" to a data.frame
解决方法
你可以通过parse(text = ...)将带下标格式的字符向量转换为可被ggarrange识别的表达式向量,具体代码如下:
# 定义带LaTeX式下标语法的字符向量 mylabel_text <- c("PM[2.5]", "SO[2]", "O[3]") # 转换为可解析的表达式向量 mylabel <- parse(text = mylabel_text) # 正常调用ggarrange ggpubr::ggarrange(fig[[1]], fig[[2]], fig[[3]], ncol=1, nrow=3, labels = mylabel)
补充说明
你之前用expression("PM"[2.5], "SO"[2], "O"[3])生成的是长度为3的expression对象,但ggarrange的labels逻辑无法直接处理这种类型;而parse(text = ...)生成的表达式向量,会被函数正确解析并渲染出带下标格式的标签。
内容的提问来源于stack exchange,提问作者Ice Guo
相关产品推荐
相关产品推荐

