前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >眼馋Y叔的可视化函数却还想使用DAVID结果肿么办

眼馋Y叔的可视化函数却还想使用DAVID结果肿么办

作者头像
生信技能树
发布2019-12-15 11:40:39
2.7K0
发布2019-12-15 11:40:39
举报

昨天宣传了Y叔的clusterProfiler包的让人眼花缭乱的可视化炫技,见:为R包写一本书(向Y叔致敬) 。有趣的是粉丝留言提到:Y叔的图必须以富集出来的对象,比如enrichKK来画,如果是自己准备数据框的话,就不行,不知道作者有没有好的建议?

实际上,我很能理解粉丝的心情, 确实就这么一个数据集,使用Y叔的clusterProfiler包的结果不满意,就不得不使用在线网页工具:Functional Annotation Tool DAVID Bioinformatics Resources 6.8, NIAID/NIH ,反正也是是可以做GO/KEGG数据库注释(通常就是超几何分布检验啦)的,只需要用户上传自己拿的的基因集就可以,大大的方便了生物学家对数据库的使用。

但是DAVID工具拿到的是分析结果,导入R也是一个数据框,的确不符合Y叔各种可视化函数的输入要求。这个的确大部分初学者是无法解决的,那么我写这个教程就意义重大了。

首先查看Y叔自己的可视化函数要求的对象

具体可视化函数见:为R包写一本书(向Y叔致敬) ,我这里直接使用示例数据啦,代码如下:

library(clusterProfiler)
data(gcSample)
enrichKK <- enrichKEGG(gcSample[[1]])
enrichKK
class(enrichKK)

可以看到,这个enrichResult对象,里面的东西还蛮多的!

这个对象,当然是可以被Y叔自己的可视化函数进行绘图的啦。

简单谷歌就可以看到该对象的详细信息:https://www.rdocumentation.org/packages/DOSE/versions/2.10.6/topics/enrichResult-class

但是我们提到过,后续的可视化函数,其实重要的就是超几何分布检验后的结果表格而已,你采用DAVID工具拿到的是分析结果,导入R也是一个数据框,并没有本质上区别。

但是数据框毕竟是没办法被可视化函数识别的啊!

> dotplot(enrichKK@result)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘dotplot’ for signature ‘"data.frame"’

毫无疑问的报错!

解决方案其实很简单,把你的数据框转为Y叔自己的可视化函数所需要的这个enrichResult对象,虽然里面的东西很多,但是你只需要包超几何分布检验后的结果表格是对的即可。

x=enrichKK@result
head(x[,1:4])
> colnames(x)
[1] "ID"          "Description" "GeneRatio"   "BgRatio"     "pvalue"      "p.adjust"    "qvalue"     
[8] "geneID"      "Count"

可视化本质上要的是这样的结果表格

最好是保证列数目一样哦。

创建S4对象

的大部分人来说,S4对象是绝对的超纲啦,不过,这里我只需要你记住两个函数,而且只需要使用一个函数即可。定义一个S4对象,使用函数setClass ,实例化一个,使用函数new

y=new("enrichResult",
      result=x)
y
dotplot(y,orderBy ='GeneRatio')

虽然这个时候,我们创造的y这个假冒伪劣的enrichResult对象甚至是错的,但是神奇的事情发生了,出图啦!

是不是很激动啊!

其它对象同理也可以自由创造

你把下面的代码运行一波就明白了,其实就是需要花点时间了解一下作者定义好的对象,然后把相应的数据准备好,使用函数new 构造一下即可。

library(clusterProfiler)
data(gcSample)
x <- compareCluster(gcSample,fun = "enrichKEGG")
p <- dotplot(x, showCategory=10)
p
x
class(x)
# https://www.rdocumentation.org/packages/clusterProfiler/versions/3.0.4/topics/compareClusterResult-class 
# compareClusterResult:'data.frame':    56 obs. of  10 variables:
tmp=as.data.frame(x)
# 这里是S4对象,需要掌握两个函数:
# 定义一个S4对象,使用函数setClass 
# 实例化一个,使用函数new  
y=new("compareClusterResult",
      compareClusterResult=as.data.frame(x),
      fun='enrichGO')
y 
class(y)
dotplot(y, showCategory=10)

每个对象都有它的重点,比如上面的 compareClusterResult ,重点就是多个基因集的结果数据框,如下:

> head(tmp[,1:4])
  Cluster       ID                            Description GeneRatio
1      X2 hsa04110                             Cell cycle    18/377
2      X2 hsa05169           Epstein-Barr virus infection    23/377
3      X2 hsa05340               Primary immunodeficiency     8/377
4      X3 hsa04512               ECM-receptor interaction     9/184
5      X3 hsa04060 Cytokine-cytokine receptor interaction    17/184
6      X3 hsa04151             PI3K-Akt signaling pathway    19/184
> colnames(tmp)
 [1] "Cluster"     "ID"          "Description" "GeneRatio"   "BgRatio"     "pvalue"      "p.adjust"   
 [8] "qvalue"      "geneID"      "Count"      
> 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先查看Y叔自己的可视化函数要求的对象
  • 创建S4对象
  • 其它对象同理也可以自由创造
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档