生信绘图

拯救你那些列名里有特殊字符的数据

2022-06-26  本文已影响0人  小洁忘了怎么分身

问题

列名里有特殊字符时,运行tidyverse的代码就会失败,举个栗子:

编个有特殊字符的数据

test = iris
colnames(test)[1] = "ca di"
library(ggplot2)
ggplot(test)+
  geom_boxplot(aes(Species,
                  ca di))
## Error: <text>:3:22: unexpected symbol
## 2:   geom_boxplot(aes(Species,
## 3:                   ca di
##                         ^

搜索

去搜索解决办法,找到了两个链接: https://community.rstudio.com/t/how-to-deal-with-spaces-in-column-names/15818

https://community.rstudio.com/t/unexpected-symbol-for-plotting-ggplot/90667就是把列名前后加上反引号就可以了。这个操作以前也有过,用$写列名时,有特殊字符就会自动加上反引号,如下:

test$`ca di`
##   [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
##  [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
##  [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
##  [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
##  [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
##  [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
## [109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
## [127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
## [145] 6.7 6.7 6.3 6.5 6.2 5.9

解决

ggplot(test)+
  geom_boxplot(aes(Species,
                  `ca di`))

ok 啦。

拓展

如果是循环作图,用同样的代码换数据画多张图,可以用for循环或者lapply。

用lapply举个栗子

aes_string 替代aes

a = lapply(1:4, function(i){
  ggplot(test)+
    geom_boxplot(aes_string("Species",
                            paste0("`",colnames(test)[i],"`"),
                            fill = "Species"))+
    theme_bw()

})
library(patchwork)
wrap_plots(a)+plot_layout(guides = "collect")

eval+parse 解析字符串

b = lapply(1:4, function(i){
  ggplot(test)+
    geom_boxplot(aes(Species,
                     eval(parse(text = paste0("`",colnames(test)[i],"`"))),
                     fill = Species))+
    ylab(colnames(test)[i])+
    theme_bw()

})

wrap_plots(b)+plot_layout(guides = "collect")
上一篇下一篇

猜你喜欢

热点阅读