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 ONTOLOGY
1 GO:0000001        mitochondrion inheritance       BP
2 GO:0000002 mitochondrial genome maintenance       BP
3 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, 示例如下

> GOTERM
TERM 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:0000001
Term: mitochondrion inheritance
Ontology: BP
Definition: 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:0000001
Term: mitochondrion inheritance
Ontology: BP
Definition: 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:0000001
Term: mitochondrion inheritance
Ontology: BP
Definition: 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:0000001
Term: mitochondrion inheritance
Ontology: BP
Definition: 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·

—如果喜欢,快分享给你的朋友们吧—


扫描关注微信号,更多精彩内容等着你!


你可能感兴趣的:(GO.db:存储Gene Ontology信息的R包)