打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GO.db:存储Gene Ontology信息的R包

在生信分析领域,R语言由于其简单易用的特点和良好的生态环境,占用重要的一席之地。其中,Bioconductor作为生信分析专用的R语言社区,提供了许多的R包。

Bioconductor上的所有R包可以分成4大类别,示意图如下


software类型的R包用于执行某项具体的分析内容,比如edgeR, DESeq2等,AnnotationData类型的包在R中存储了对应的数据库,比如GO.db等,ExperimentData类型的包存储了实验数据,Workflow类型的包提供了完整分析的pipeline。本文主要介绍AnnotationData类型的包。

为了规范化开发,方便R包的使用,Bioconductor的开发者提供了几种基础的R包,用于定义几种基础信息的存储方式。

对于数据库内容的存储和使用,在AnnotationDbi这个包中统一进行了定义。由于采用了面向对象的编程方式,所有继承了这种对象的R包其使用方式是一样的。

在Bioconductor中,有以下4种类别的注释信息包,都继承了AnnotationDbi

  1. Organism level
    比如human对应的Org.Hs.eg.db, 存储了人类的基因信息。

  2. Platform level
    比如hgu133plus2.db, 这种类型的包主要存储不同平台的数据,比如不同芯片的探针信息。

  3. Homology-level
    比如hom.Dm.inp.db,存储了同源信息

  4. System-biology level
    比如GO.db, 存储生物学相关的数据库。

所有这些后缀为.db的R包,其本质都为一个sqlite数据库,一种轻量级的关系型数据库,只不过是通过R来进行访问。

GO.db为例,在下载的源代码中,可以找到对应的后缀为.sqlite的数据库文件,位于extdata目录下。

关系型数据库中的基本单位是表,对于一个.db的R包而言,可以通过以下4个函数访问其中的内容

  1. columns

  2. keytypes

  3. keys

  4. select

对于一个数据表而言,首先我们需要知道表头信息,就可以通过columnskeytypes函数来访问得到,示例如下

> keytypes(GO.db)[1] "DEFINITION" "GOID"       "ONTOLOGY"   "TERM"      > columns(GO.db)[1] "DEFINITION" "GOID"       "ONTOLOGY"   "TERM"

从以上代码的结果可以看出,GO.db提供的数据表共有4列。
假如想要访问其中某一列的值,可以通过keys函数,示例如下

> keys(GO.db, keytype = "GOID")[1:3][1] "GO:0000001" "GO:0000002" "GO:0000003"

上述代码返回GOID这一列的内容。

对于数据库而言,查询是基本操作,在SQL语言中,通过select实现,对应的在R中通过select函数来实现,示例如下

> k <- keys(GO.db, keytype = "GOID")[1:3]> select(GO.db,   keys = k,   columns = c("TERM","ONTOLOGY"),   keytype="GOID")'select()' returned 1:1 mapping between keys and columns        GOID                             TERM ONTOLOGY1 GO:0000001        mitochondrion inheritance       BP2 GO:0000002 mitochondrial genome maintenance       BP3 GO:0000003                     reproduction       B

通过返回结果可以看到,GO.db提供了一张4列的数据表,GOID表示GO编号,DEFINITION表示GO功能的详细描述信息,TERM表示功能的简单介绍,ONTOLOGY表示GO的3大类别。

除了基本的数据表之外,在这种类型的包中还会提供很多其他信息,可以通过ls函数查看,示例如下

> ls("package:GO.db")[1] "GO"            "GO.db"         "GO_dbconn"     "GO_dbfile"     "GO_dbInfo"     "GO_dbschema"  [7] "GOBPANCESTOR"  "GOBPCHILDREN"  "GOBPOFFSPRING" "GOBPPARENTS"   "GOCCANCESTOR"  "GOCCCHILDREN"[13] "GOCCOFFSPRING" "GOCCPARENTS"   "GOMAPCOUNTS"   "GOMFANCESTOR"  "GOMFCHILDREN"  "GOMFOFFSPRING"[19] "GOMFPARENTS"   "GOOBSOLETE"    "GOSYNONYM"     "GOTERM"

其中有一部分对象的类型AnnDbBimap, 示例如下

> GOTERMTERM map for GO (object of class "GOTermsAnnDbBimap")

这种对象类似基本数据结构中的list, 常用的操作语句示例如下

> mappedkeys(GOTERM)[1:3][1] "GO:0000001" "GO:0000002" "GO:0000003"> ls(GOTERM)[1:3][1] "all"        "GO:0000001" "GO:0000002"> GOTERM[["GO:0000001"]]GOID: GO:0000001Term: mitochondrion inheritanceOntology: BPDefinition: The distribution of mitochondria, including the mitochondrial genome, into daughter    cells after mitosis or meiosis, mediated by interactions between mitochondria and the    cytoskeleton.Synonym: mitochondrial inheritance> get("GO:0000001", GOTERM)GOID: GO:0000001Term: mitochondrion inheritanceOntology: BPDefinition: The distribution of mitochondria, including the mitochondrial genome, into daughter    cells after mitosis or meiosis, mediated by interactions between mitochondria and the    cytoskeleton.Synonym: mitochondrial inheritance> mget("GO:0000001", GOTERM)$`GO:0000001`GOID: GO:0000001Term: mitochondrion inheritanceOntology: BPDefinition: The distribution of mitochondria, including the mitochondrial genome, into daughter    cells after mitosis or meiosis, mediated by interactions between mitochondria and the    cytoskeleton.Synonym: mitochondrial inheritance

lsmappedkeys函数都是用于查看这个列表的名称,只不过ls会对所有key排序;getmget选取其中的内容,也可以像list一样,通过[[ ]]操作符直接访问。

由于和list类似,所以经常会将这些对象通过as.list转换之后,在进行操作,示例如下

> go <- as.list(GOTERM)> go[[1]]GOID: GO:0000001Term: mitochondrion inheritanceOntology: BPDefinition: The distribution of mitochondria, including the mitochondrial genome, into daughter    cells after mitosis or meiosis, mediated by interactions between mitochondria and the    cytoskeleton.Synonym: mitochondrial inheritance


需要注意的是这个步骤是非常耗时的,实际使用时,可以先挑选子集,然后在转换成list。

很多做GO富集分析的R包都会调用GO.db, 掌握其基本操作,有助于理解其他封装好的R包。

·end·

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
靠树树会倒,不要太相信你的注释文件!
你只想做ID转换却不知道为什么要转换
Bioconductor的数据包library(org.Hs.eg.db)简介 | 生信菜鸟团
【R】clusterProfiler的GO/KEGG富集分析用法小结
GO、KEGG富集分析(一)有参情况
使用topGO进行GO富集分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服