1. 程式人生 > >GO.db:儲存Gene Ontology資訊的R包

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

  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包。