KEGGREST パッケージは R を利用して、KEGG ウェブサイトにあるパスウェイデータを検索したり、取得したりすることのできる Bioconductor パッケージである。KEGGREST パッケージと同じ機能を持つ KEGG.db や KEGGSOAP パッケージは、データが古いままになっているため、特別な理由がない限り KEGG.db や KEGGSOAP を利用しないほうがいい。

library(KEGGREST)

KEGG で取り扱える生物種

KEGG には多くの生物種に対してアノテーションされている。具体的な生物種は http://rest.kegg.jp/list/organism で確認できる。リンク先は以下のように、タブ区切りのテキスト形式となっている。左から生物種の ID、生物種のコード、学名、系統の順で記載されている。とくに、2 列目の生物種を表すコードが重要で、KEGGREST の関数を利用する際に、この生物種コードを渡す必要がある。

T01001	hsa	Homo sapiens (human)	Eukaryotes;Animals;Vertebrates;Mammals
T01005	ptr	Pan troglodytes (chimpanzee)	Eukaryotes;Animals;Vertebrates;Mammals
T02283	pps	Pan paniscus (bonobo)	Eukaryotes;Animals;Vertebrates;Mammals
T02442	ggo	Gorilla gorilla gorilla (western lowland gorilla)	Eukaryotes;Animals;Vertebrates;Mammals
T01416	pon	Pongo abelii (Sumatran orangutan)	Eukaryotes;Animals;Vertebrates;Mammals
T03265	nle	Nomascus leucogenys (northern white-cheeked gibbon)	Eukaryotes;Animals;Vertebrates;Mammals

簡単な例として、ヒトの遺伝子に関係するパスウェイの ID とパスウェイの名前をすべて取得するには以下のようにする。

hsa.kegglist <- keggList("hsa")
##                                           hsa:440034
##           "DKFZp686K1684; uncharacterized LOC440034"
##                                        hsa:100287010
##                       "uncharacterized LOC100287010"
##                                        hsa:100506548
##                       "uncharacterized LOC100506548"
##                                        hsa:100288846
##                       "uncharacterized LOC100288846"
##                                           hsa:222029
## "DKFZp434L192; uncharacterized protein DKFZp434L192"
##                                           hsa:284581
##                          "uncharacterized LOC284581"

特定のパスウェイの検索

あるパスウェイの ID を与えて、その名前、定義や関連遺伝子名などを検索するときに keggGet 関数を利用する。検索結果はリスト形式で返される(検索キーワードが 1 つの場合でも)。

hsa10458 <- keggGet("hsa:10458")
names(hsa10458[[1]])
##  [1] "ENTRY"      "NAME"       "DEFINITION" "ORTHOLOGY"  "ORGANISM"
##  [6] "PATHWAY"    "BRITE"      "POSITION"   "MOTIF"      "DBLINKS"
## [11] "STRUCTURE"  "AASEQ"      "NTSEQ"

hsa10458[[1]]$ENTRY
##     CDS
## "10458"

hsa10458[[1]]$NAME
## [1] "BAIAP2, BAP2, FLAF3, IRSP53"

hsa10458[[1]]$DEFINITION
## [1] "(RefSeq) BAI1-associated protein 2"

hsa10458[[1]]$DBLINK
## [1] "NCBI-GI: 222080100"       "NCBI-GeneID: 10458"
## [3] "OMIM: 605475"             "HGNC: 947"
## [5] "HPRD: 05686"              "Ensembl: ENSG00000175866"
## [7] "Vega: OTTHUMG00000177698" "UniProt: Q9UQB8"

hsa10458[[1]]$NTSEQ
##   A DNAStringSet instance of length 1
##     width seq
## [1]  1605 ATGTCTCTGTCTCGCTCAGAGGAGATGCACCGGC...ACCAACGACAGGTCTGCCCCCCTCCTCAGCTGA

hsa10458[[1]]$AASEQ
##   A AAStringSet instance of length 1
##     width seq
## [1]   534 MSLSRSEEMHRLTENVYKTIMEQFNPSLRNFIAM...LDDYGARSMSRNPFAHVQLKPTVTNDRSAPLLS

全パスウェイのデータを取得

ある生物種の全パスウェイを取得して、遺伝子 ID から KEGG パスウェイへマッピングしたり、KEGG パスウェイから遺伝子 ID にマッピングしたりすることができるようになる。ここでは、シロイヌナズナの遺伝子 ID (TAIR)とパスウェイのマッピング例を取り上げる。

まずは KEGG パスウェイから TAIR ID を引く例を示す。

kegg2tair <- keggLink("ath", "pathway")
keggid      <- gsub("path:", "", names(kegg2tair))
keggid.uniq <- unique(keggid)
KEGG2TAIR <- vector("list", length(keggid.uniq))
names(KEGG2TAIR) <- keggid.uniq

for(i in 1:length(KEGG2TAIR)) {
  KEGG2TAIR[[i]] <- as.character(gsub("ath:", "", kegg2tair[keggid == keggid.uniq[i]]))
}

query <- c("ath00514", "ath04122")
res <- KEGG2TAIR[query]
res
## $ath00514
## [1] "AT1G17270" "AT1G53770" "AT3G04240" "AT5G50420"
## 
## $ath04122
##  [1] "AT1G01290" "AT1G16460" "AT1G51310" "AT1G76170" "AT1G79230" "AT2G31955"
##  [7] "AT2G43760" "AT2G44270" "AT2G45695" "AT3G61113" "AT4G10100" "AT4G35910"
## [13] "AT5G55130" "AT5G65720"

as.character(unlist(res))
##  [1] "AT1G17270" "AT1G53770" "AT3G04240" "AT5G50420" "AT1G01290" "AT1G16460"
##  [7] "AT1G51310" "AT1G76170" "AT1G79230" "AT2G31955" "AT2G43760" "AT2G44270"
## [13] "AT2G45695" "AT3G61113" "AT4G10100" "AT4G35910" "AT5G55130" "AT5G65720"

TAIR ID から KEGG パスウェイを引く例。

tair2kegg <- keggLink("pathway", "ath")
tairid      <- gsub("ath:", "", names(tair2kegg))
tairid.uniq <- unique(tairid)
TAIR2KEGG <- vector("list", length(tairid.uniq))
names(TAIR2KEGG) <- tairid.uniq

for(i in 1:length(TAIR2KEGG)) {
  TAIR2KEGG[[i]] <- as.character(gsub("path:", "", tair2kegg[tairid == tairid.uniq[i]]))
}

query <- c("AT5G61760", "AT5G58330")
res <- TAIR2KEGG[query]
res
## $AT5G61760
## [1] "ath00562" "ath01100" "ath04070"
## 
## $AT5G58330
## [1] "ath00620" "ath00710" "ath01100" "ath01200"

as.character(unlist(res))
## [1] "ath00562" "ath01100" "ath04070" "ath00620" "ath00710"
## [6] "ath01100" "ath01200"