GO.db:儲存Gene Ontology資訊的R包
歡迎關注微信公眾號《生信修煉手冊》!
在生信分析領域,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包。