tibble列绘制直方图:含特殊字符的列为何无法正常运行?
问题翻译
我有一个包含24列的tibble,每列有107条观测值,所有列都是描述CT图像骨标本的double类型变量。我想给其中多数列绘制直方图。使用代码ggplot(data = tibia_data) + geom_histogram(mapping = aes(x=Tot.vBMD1))可以正常生成无连字符/斜杠列(比如PatNo、Tot.vBMD1)的直方图,但对含连字符/斜杠的列(比如Total-Area)执行相同代码时出现报错:
Error in geom_histogram():! Problem while computing aesthetics.ℹ Error occurred in the 1st layer.Caused by error:! object 'Total' not found
连字符似乎导致R无法识别“Total-Area”为列名,是不是我忽略了tibble或列结构的相关细节?
问题原因
R会把列名里的连字符-当成算术减号,所以你写x=Total-Area时,它会误认为要计算Total减去Area的差值,但这两个对象并不存在,因此触发报错。
解决方法
有两种简单方式处理带特殊字符的列名:
- 用反引号包裹列名:用
`把带连字符/斜杠的列名包起来,明确告诉R这是一个完整的列名,而非表达式:
ggplot(data = tibia_data) + geom_histogram(mapping = aes(x=`Total-Area`))
- 使用
.data代词:借助tidyverse的.data代词指定列来自数据框,消除歧义:
ggplot(data = tibia_data) + geom_histogram(mapping = aes(x=.data[["Total-Area"]]))
批量绘图提示
如果需要给多列批量生成直方图,可以用purrr包简化操作:
library(purrr) library(ggplot2) # 定义需要绘图的目标列 target_cols <- c("Total-Area", "Other/Column", "Tot.vBMD1") # 批量生成直方图并返回列表 map(target_cols, function(col) { ggplot(tibia_data, aes(x = .data[[col]])) + geom_histogram() + labs(title = paste("直方图:", col)) })
内容的提问来源于stack exchange,提问作者Nathan_of_Bothell
相关产品推荐
相关产品推荐

