Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to R for Genomic Data Analysis

onouyek
September 25, 2020

Introduction to R for Genomic Data Analysis

onouyek

September 25, 2020
Tweet

More Decks by onouyek

Other Decks in Programming

Transcript

  1. 目次 • データ分析の流れ • パッケージのインストール • 算術演算 • データ構造 •

    データ型 • データの読み取りと書き込み • プロット • 関数と制御構造
  2. R:The Comprehensive R Archive Network RStudio:Open source & professional software

    for data science teams - RStudio https://github.com/onouek/intro2R の ボタンからRStudioを起動 Rの実行環境 エディター コンソール 環境変数など プロット、 ヘルプなど
  3. パッケージのインストール (CRAN, Bioconductor) パッケージ:ベースRへのアドオン CRAN:Rのメインパッケージリポジトリ Bioconductor:計算生物学に関連するパッケージ専用のパッケージリポジトリ # #で始まる行はコメント行 # CRANの"randomForest"パッケージのインストール

    install.packages("randomForest") # Bioconductorのパッケージインストーラー”BiocManager”のインストール install.packages("BiocManager") # Bioconductorの"rtracklayer"のインストール BiocManager::install("rtracklayer")
  4. パッケージのインストール (GitHub, source file) # devtoolsパッケージを使ってGitHubから"compgenomr/compGenomRData"パッケージのインストール library(devtools) install_github("compgenomr/compGenomRData") # パッケージのsource

    fileをダウンロード download.file( "https://github.com/tidyverse/stringr/archive/v1.4.0.tar.gz", destfile="v1.4.0.tar.gz") # source fileからインストール install.packages("v1.4.0.tar.gz",repos=NULL,type="source") # source fileの削除 unlink("v1.4.0.tar.gz")
  5. 算術演算 2 + 3 # 足し算 3 * 5 #

    掛け算 2 + 3 * 5 # 順番に注意! 5^2 # 累乗 3/2 # 割り算 log(10) # 自然対数 sqrt(16) # 平方根 abs(3-7) # 絶対値 exp(2) # 指数関数 pi # 円周率
  6. ベクトル 基本的に同じ型(numeric、character、logicalなど)の要素のリスト。 x <- c(1,3,2,10,5) # c()でxというベクトルを作成。”<-”は代入演算子。 x = c(1,3,2,10,5)

    # 代入演算子は”=”も使用できる。 ## [1] 1 3 2 10 5 y <- 1:5 # 1~5の連続値yというベクトルを作成。 ## [1] 1 2 3 4 5 y+2 # 操作はすべての要素に対して適用される。 ## [1] 3 4 5 6 7 y # y自体は変更されない。 ## [1] 1 2 3 4 5 y <- y+2 # 計算結果をyに代入することでyが更新される。 ## [1] 3 4 5 6 7 r1 <- rep(1,3) # 要素1、長さ3のベクトルを作成。 ## [1] 1 1 1 length(r1) # length()でベクトルの長さを確認。 ## [1] 3 class(r1) # class()でベクトルのクラスを確認。 ## [1] “numeric” a <- 1 # 実はこれも長さ1のベクトル。 ## [1] 1
  7. 行列 行と列の数値配列。各行または列がベクトル。 x <- c(1,2,3,4) y <- c(4,5,6,7) m1 <-

    cbind(x,y) # cbind()で列で結合 t(m1) # t()で転置 dim(m1) # dim()で次元を確認 m2 <- matrix(c(1,3,2,5,-1,2,2,3,9),nrow=3) # matrix()で要素ベクトルと行数を指定 m2 ## [,1] [,2] [,3] ## [1,] 1 5 2 ## [2,] 3 -1 3 ## [3,] 2 2 9
  8. データフレーム 異なる列に異なる型(numeric、character、factorなど)を設定できるデータ構造 chr <- c("chr1","chr1","chr2","chr2") # 染色体番号 strand <- c("-","-","+","+")

    # ストランド start <- c(200,4000,100,400) # 開始位置 end <- c(250,410,200,450) # 終了位置 # data.frame()でデータフレームを作成 mydata <- data.frame(chr,start,end,strand) # data.frame()の引数にキーワードを使用しても列名を指定できる mydata <- data.frame(chr=chr,start=start,end=end,strand=strand)
  9. リストの要素の抽出 位置または名前を二重括弧で指定して抽出できる。 # 位置(3番目)を指定してオブジェクトを抽出 w[[3]] ## [,1] [,2] ## [1,]

    1 3 ## [2,] 2 4 # 名前(mynumbers)を指定してオブジェクトを抽出 w[["mynumbers"]] ## [1] 1 2 3 # 名前(age)を$で指定してオブジェクトを抽出 w$age ## [1] 5.3
  10. データ型 Rの4つのデータ型(numeric、logical、character、integer) # numericベクトルxを作成 x <- c(1,3,2,10,5) ## [1] 1

    3 2 10 5 # logicalベクトルxを作成 x <- c(TRUE,FALSE,TRUE) ## [1] TRUE FALSE TRUE # characterベクトルxを作成 x <- c("sds","sd","as") ## [1] "sds" "sd" "as" class(x) ## [1] "character" # integerベクトルxを作成 x <- c(1L,2L,3L) ## [1] 1 2 3 class(x) ## [1] “integer”
  11. read.table()を使用して表形式のデータを簡単に読み取ることができる。 データの読み取り # system.file()でファイルへのパスを取得 enhancerFilePath= system.file("extdata","subset.enhancers.hg18.bed" ,package="compGenomRData" ) cpgiFilePath= system.file("extdata","subset.cpgi.hg18.bed"

    ,package="compGenomRData" ) enh.df<-read.table(enhancerFilePath, header = FALSE) # エンハンサーマーカーの BEDファイルを読み込み cpgi.df<-read.table(cpgiFilePath, header = FALSE) # CpGアイランドのBEDファイルを読み込み head(cpgi.df) # head()でデータの先頭を確認 ## V1 V2 V3 V4 ## 1 chr20 195575 195851 CpG:_28 ## 2 chr20 207789 208148 CpG:_32 ## 3 chr20 219055 219437 CpG:_33 ## 4 chr20 225831 227155 CpG:_135 ## 5 chr20 252826 256323 CpG:_286 ## 6 chr20 275376 276977 CpG:_116
  12. ヒストグラム(base graphics) # 正規分布から50個の値をサンプリングし、 # xベクトルに代入。 x <- rnorm(50) #

    hist()でヒストグラムをプロット。 hist(x,main="Hello histogram!!!" ,col="red") # main引数でプロットにタイトルを、 # col引数を使用してバーの色を変更できる。
  13. 散布図(base graphics) # 正規分布から50個の値をサンプリングし、 # yベクトルに代入。 y <- rnorm(50) #

    plot()で散布図をプロット。 # xlabとylab引数でx軸とy軸のラベルを変更できる。 plot(x,y,main="scatterplot of random samples", ylab="y values",xlab="x values")
  14. プロットを画像ファイルに保存する手順 1. グラフィックデバイスを開く 2. プロットする 3. グラフィックデバイスを閉じる プロットの保存 pdf("myplot.pdf",width=5,height=5) plot(x,y)

    dev.off() # 最初にプロットを作成してから、そのプロットをグラフィックデバイスにコピーすることもできる plot(x,y) dev.copy(pdf,"myplot.pdf",width=7,height=5) dev.off()
  15. ヒストグラム(ggplot2) ggplot(myData, aes(x=col1)) + geom_histogram() + # プロットの種類 labs(title="Histogram for

    a random variable", x="my variable", y="Count") # labs()で軸ラベルとタイトルを指定
  16. 複数のプロット(ggplot2+cowplot) library(cowplot) p1 <- ggplot(myData2,  aes(x=values,fill=group)) + geom_histogram() # ヒストグラム

    p2 <- ggplot(myData, aes(x=col1, y=col2)) + geom_point() # 散布図 # plot_grid()で2つのプロットを組み合わせ plot_grid(p1, p2, labels = c('A', 'B'), label_size = 12)
  17. 制御構造 特定の条件が満たされた場合のみコードの特定の部分を実行するためのもの。 cpgi.df <- read.table(cpgiFilePath , header = FALSE) largeCpGi

    <- function(bedRow){cpglen=bedRow[3]-bedRow[2]+1 if(cpglen>1500){ # CpGアイラインドが大きいか cat("this is large\n") } else if(cpglen<=1500 & cpglen>700){ # CpGアイラインドが通常の長さか cat("this is normal\n") } else{ # それ以外(CpGアイラインドが短いか) cat("this is short\n") } } largeCpGi(cpgi.df[10,])
  18. ループ 特定のタスクを繰り返したり、関数を複数回実行したりするためのもの。 for(i in 1:10){ # 繰り返す回数 cat("This is iteration")

    print(i) } result=c() for(i in 1:100){ # CpGアイランドの長さを計算 len=cpgi.df[i,3]-cpgi.df[i,2]+1 # 結果をresultに追加 result=c(result,len) } head(result)