欢迎关注微信公众号《生信修炼手册》!
在生信分析领域,R语言由于其简单易用的特点和良好的生态环境,占用重要的一席之地。其中,Bioconductor作为生信分析专用的R语言社区,提供了许多的R包。
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包。
|
请发表评论