いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】出芽酵母のGO解析をしたかったのだけれど

・お題:Saccharomyces cerevisiaeの遺伝子のリストを入手したので、GO解析してみたい。

 

・org.Sc.sgd.dbというアノテート用のパッケージが配布されているので、clusterprofilerのチュートリアルを参考にやればなんの問題もなくできる、と思っていた。

yulab-smu.top

 

・とりあえずパッケージを読み込む。

> library(clusterProfiler)
> library(org.Sc.sgd.db)

 

・遺伝子セットを作る。wikipathwaysで適当にpathwayを選んでメモした。

> GENES <- c("YIR027C","YIR029W","YIR032C","YBR208C","YBR208C")

 

・GO解析してみると、エラーが出た。

> ego <-
+   enrichGO(gene = GENES,
+            OrgDb =  org.Sc.sgd.db,
+            ont = "BP", #"BP","CC","MF","ALL"のどれか
+            pAdjustMethod = "BH",
+            keyType = "ENSEMBL", #今回はENSEMBL形式の遺伝子リスト
+            pvalueCutoff = 1,
+            qvalueCutoff = 1,
+            readable = TRUE)

Error in .testForValidCols(x, cols) : 
  Invalid columns: SYMBOL. Please use the columns method to see a listing of valid arguments.
In addition: Warning message:
In setReadable(res, OrgDb) :
  Fail to convert input geneID to SYMBOL since no SYMBOL information available in the provided OrgDb...

 

・readableをTRUEにするにはSYMBOL情報がないとダメらしい。SYMBOL情報ならあるだろうと思って使えるキーを覗いてみると、なかった。。

> keytypes(org.Sc.sgd.db)

 

・GENENAMEとCOMMONというキーがSYMBOLに対応しているらしい。そんなことがあるのか。。

・先のエラーを回避するには、readable をFALSEにすれば良い。せっかくなので、ENSEMBLの遺伝子リストをGENENAMEに変換してからエンリッチメント解析してみる。

> GENES_NAME <-
+   bitr(geneID = GENES,
+        fromType="ENSEMBL",
+        toType="GENENAME",
+        OrgDb = "org.Sc.sgd.db") %>%
+   .$GENENAME

> GENES_NAME
[1] "DAL1"   "DAL2"   "DAL3"   "DUR1,2"

・ちょっと減ってしまった。減るのが気になるのであれば、ENSEMBLのまま解析した方が良いかも。今回はGENE_NAMEで進める。

> ego <-
+   enrichGO(gene = GENES_NAME,
+            OrgDb =  org.Sc.sgd.db,
+            ont = "BP", #"BP","CC","MF","ALL"のどれか
+            pAdjustMethod = "BH",
+            keyType = "GENENAME",
+            pvalueCutoff = 1,
+            qvalueCutoff = 1,
+            readable = FALSE #ここが大事
+            )

 

・結果を見てみる。

> ego@result

> barplot(ego, showCategory=20)

 

おわり

 

【R】色のベクトルを作りたい

・お題:元ベクトルに対応するように色を振ったベクトルを作りたい。

 

・やることは、元ベクトルをファクター化して、色のベクトルから要素をとって来るような感じ。

> ori <- c("1","1","2","3","3") #元ベクトルを設定

> iro <- c("red", "blue", "yellow") #色ベクトルを作成
> iro[factor(ori)]
[1] "red"    "red"    "blue"   "yellow" "yellow"

 

・試しにヒートマップを作るのに使ってみる。

> library(tidyverse) #便利に使うライブラリ
> library(gplots) #heatmap.2のライブラリ

 

・適当にデータセットを作る。
> df <-
+   rbind(
+     data.frame(
+       sample_1 = rnorm(n = 10, mean = 100, sd = 20),
+       sample_2 = rnorm(n = 10, mean = 100, sd = 20),
+       sample_3 = rnorm(n = 10, mean = 100, sd = 20),
+       sample_4 = rnorm(n = 10, mean = 80, sd = 10),
+       sample_5 = rnorm(n = 10, mean = 80, sd = 10),
+       sample_6 = rnorm(n = 10, mean = 120, sd = 30),
+       sample_7 = rnorm(n = 10, mean = 120, sd = 30),
+       row.names = paste0("gene", LETTERS[1:10])
+     ),
+     data.frame(
+       sample_1 = rnorm(n = 10, mean = 70, sd = 10),
+       sample_2 = rnorm(n = 10, mean = 70, sd = 10),
+       sample_3 = rnorm(n = 10, mean = 70, sd = 10),
+       sample_4 = rnorm(n = 10, mean = 130, sd = 30),
+       sample_5 = rnorm(n = 10, mean = 130, sd = 30),
+       sample_6 = rnorm(n = 10, mean = 100, sd = 20),
+       sample_7 = rnorm(n = 10, mean = 100, sd = 20),
+       row.names = paste0("gene", LETTERS[11:20])
+     )
+   )
> df %>% head(.)

 

・サンプル構成を作る。

> group <-
+   rep(c("alpha","beta","gamma"), c(3,2,2)) %>% 
+   factor(.)

> group
[1] alpha alpha alpha beta  beta  gamma gamma
Levels: alpha beta gamma

 

・カラーセットを作る。色は以下を参考にした。

stackoverflow.com


> colorBlindGrey8 <-
+   c("#999999", "#E69F00", "#56B4E9", "#009E73", 
+     "#F0E442", "#0072B2", "#D55E00", "#CC79A7")

 

・それぞれのサンプルに対応する色のベクトルを作る。

> colors <- colorBlindGrey8[group]
> colors 

[1] "#999999" "#999999" "#999999" "#E69F00" "#E69F00" "#56B4E9" "#56B4E9"

 

・ヒートマップを描いてみる。引数marginsに余白を指定しないとsampleが見切れてしまう。

> heatmap.2(x = as.matrix(df),
+           trace = "none",
+           main = "Test Title",
+           ColSideColors = colors,
+           col = "redblue",
+           scale = "row",
+           margins = c(8,8))

 

・グラデーションを作るなら、gplotsパッケージのcolorpanel関数を使うのも有効。

> library(gplots)

> col <- colorpanel(1000,"blue","white","red") #色を指定しておく。

 

おわり

 

【R】アルファベットや月のベクトルを呼び出したい

・お題:piと言えば円周率が割り当てられているように、アルファベットや月名を呼び出したい。

 

・Rにはもともと割り当てられている変数がある。アルファベットや月名は、以下が割り当てられているのでメモしておきたい。

 

> LETTERS #大文字アルファベット
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"


> letters #小文字アルファベット
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"


> month.name  #月フル
 [1] "January"   "February"  "March"     "April"     "May"       "June"      "July"      "August"    "September" "October"   "November"  "December" 


> month.abb #月略称
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

 

・ベクトルなので、revでひっくり返せる。

> rev(letters)
 [1] "z" "y" "x" "w" "v" "u" "t" "s" "r" "q" "p" "o" "n" "m" "l" "k" "j" "i" "h" "g" "f" "e" "d" "c" "b" "a"

 

おわり