欢迎关注”生信修炼手册”!
在生信分析领域,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
Organism level
比如human对应的Org.Hs.eg.db
, 存储了人类的基因信息。Platform level
比如hgu133plus2.db
, 这种类型的包主要存储不同平台的数据,比如不同芯片的探针信息。Homology-level
比如hom.Dm.inp.db
,存储了同源信息-
System-biology level
比如GO.db
, 存储生物学相关的数据库。
所有这些后缀为.db
的R包,其本质都为一个sqlite
数据库,一种轻量级的关系型数据库,只不过是通过R来进行访问。
以GO.db
为例,在下载的源代码中,可以找到对应的后缀为.sqlite
的数据库文件,位于extdata
目录下。
关系型数据库中的基本单位是表,对于一个.db
的R包而言,可以通过以下4个函数访问其中的内容
columns
keytypes
keys
-
select
对于一个数据表而言,首先我们需要知道表头信息,就可以通过columns
和keytypes
函数来访问得到,示例如下
> 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
ls
和mappedkeys
函数都是用于查看这个列表的名称,只不过ls
会对所有key排序;get
和mget
选取其中的内容,也可以像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·
—如果喜欢,快分享给你的朋友们吧—
扫描关注微信号,更多精彩内容等着你!