(Rで)塩基配列解析 (last modified 2023/05/24, since 2010)

このページは、RStudio (R含む)で生命科学系のデータ解析を行うためのテンプレート集です。このページに特化したチュートリアル(インストール | について基本的な利用法)を一通り実践した上でご利用ください。より一般的なチュートリアルは、教科書の付録ページ(←読込に時間がかからなくなりました)にあるR1.010とR1.020で提供しています(2023/04/01)。

アグリバイオインフォマティクス@Agribio_utokyoアグリバイオの教科書(Rで)塩基配列解析のサブページ

What's new? (過去のお知らせはこちら)

はじめに

このページは、主にNGS機器などから得られた塩基配列データ解析をRで行うための一連の手続きをまとめているものです。

Maintainerは東京大学・大学院農学生命科学研究科アグリバイオインフォマティクス教育研究ユニット門田幸二と寺田朋子です。 ボスである清水謙多郎教授をはじめ、 TCCパッケージ開発実働部隊でもあるbiopapyrus氏、 およびバグレポートや各種インストール手順書作成などで尽力いただいた諸氏のおかげでかなり規模の大きなサイトになっています (デカくなりすぎたので、2018年7月に一部がサブページに移行しました)。 しかしながら、このサイトは2010年頃から提供しているため、(私も不具合を発見したら随時修正をしてはいますが)それでもリンク切れや内容が古いものも多々あります。 リンクも自由、講義資料などとして使うのも自由です。前もっての連絡なども必要ありません。 しかし、本当に正しいやり方かどうかなど一切の保証はできませんし、必要に応じて随時変更していますので全て自己責任でご利用ください。 間違いや修正点、また「このような解析をやりたいがどうすればいいか?」などのリクエストがあればメール(koji.kadota@gmail.com)してください。 もちろん、アグリバイオインフォマティクス教育研究プログラム受講生からのリクエストは優先的に対応します。 もし私のメアドに送ったヒトで、2勤務日以内に返事をもらってないヒトは、 アグリバイオ事務局(info あっと iu.a.u-tokyo.ac.jp)宛にも送って催促してください。

このウェブサイトは、アグリバイオインフォマティクス教育研究プログラム はもちろんのこと、外部資金のサポートも一部受けています(過去・現在・未来)。 特に18K11521は、このウェブページの更新に特化したものです。 私のポジションがある限り、多くのユーザの効率的な研究推進の裏方として、地味~な活動を継続していければと思っております。 今後ともご支援のほど、よろしくお願いいたします。

このページ内で用いる色についての説明:

コメント
特にやらなくてもいいコマンド
プログラム実行時に目的に応じて変更すべき箇所

過去のお知らせ

インストール | について

以下は、「インストール | R本体とRStudio | 最新版」と「インストール | Rパッケージ | 必要最小限プラスアルファ」の推奨インストール手順をまとめたものです。 私の環境は、Windows PCは(Windows 10; 64 bit)、Macintosh PCはMacBook Pro (MacOS Monterey Ver.12.3.1; 64 bit)です。

インストール | R本体とRStudio | 最新版 | Win用

最新版(リリース版のこと)は、下記手順を実行します。インストールが無事完了したら、 デスクトップに「R x64 4.X.Y」アイコンが作成されます(XY中の数値はバージョンによって異なります)。 2022年05月01日現在の最新版は、R-4.2.0-win.exeです。

  1. Rのインストーラを「実行」
  2. 基本的には「次へ」などを押しながらインストールを完了させる
  3. 「コントロールパネル」−「デスクトップのカスタマイズ」−「フォルダオプション」−「表示(タブ)」−「詳細設定」のところで、 「登録されている拡張子は表示しない」のチェックを外してください。
  4. RStudioのダウンロードサイトをクリックし、 「RStudio-2022.02.1-461.exe」と酷似したファイル名のものをクリック。

インストール | R本体とRStudio | 最新版 | Mac用

最新版(リリース版のこと)は、下記手順を実行します。インストールが無事完了したら、 Finderを起動して、左のメニューの「アプリケーション」をクリックすると、Rのアイコンが作成されていることが確認できます。 2022年05月16日現在の最新版は、R-4.2.0.pkgです。

  1. http://cran.r-project.org/bin/macosx/の「R-4.X.Y.pkg」をクリック。 (XY中の数値はバージョンによって異なります)
  2. ダウンロードしたファイルをダブルクリックして、基本的には「次へ」などを押しながらインストールを完了させる
  3. 「Finder」-「環境設定」-「詳細」タブのところで「すべてのファイル名拡張子を表示」にチェックを入れる。
  4. RStudioのダウンロードサイトをクリックし、 「RStudio-2022.02.1-461.dmg」と酷似したファイル名のものをクリック。
  5. XQuartzをインストール(2022/05/16追加)

インストール | R本体 | 過去版 | Win用

昔のバージョンをインストールしたい局面もごく稀にあると思います。 その場合は、ここをクリックして、 任意のバージョンのものをインストールしてください。例えば、2014年10月リリースのver. 3.1.2をインストールしたい場合は、 3.1.2をクリックして、 「Download R 3.1.2 for Windows」 をクリックすれば、後は最新版と同じです。

インストール | R本体 | 過去版 | Mac用

昔のバージョンをインストールしたい局面もごく稀にあると思います。 その場合は、http://cran.r-project.org/bin/macosx/old/またはhttps://cran.r-project.org/bin/macosx/base/をクリックして、 任意のバージョンのものをインストールしてください。例えば、2014年10月リリースのver. 3.1.2をインストールしたい場合は、 ページ下部の「R-3.1.2-marvericks.pkg」 をクリックすれば、後は最新版と同じです。2022年12月03日現在、Windowsの場合はR本体のバージョンがver. 4シリーズもver. 3シリーズもここの同じリンク先から見られます。しかし、Macの場合はhttp://cran.r-project.org/bin/macosx/old/だとver. 3シリーズのみしか見られませんのでご注意ください。https://cran.r-project.org/bin/macosx/base/にはver. 4シリーズがリストアップされています(2022.12.03追加)。

インストール | Rパッケージ | について

アグリバイオで所有するノートPCは、基本的に 「インストール | Rパッケージ | 必要最小限プラスアルファ」 を利用してパッケージ群を一度にインストールしています。しかし、コロナ禍や講義で用いるパッケージの変遷などを経て、多少の不具合を許容しつつシンプルにインストールできる方針に変更しました(2022年3月30日)。 「インストール | Rパッケージ | 個別(2018年11月以降)」のところは、 インストールされていない(or されなかった)パッケージを個別にインストールする際に利用してください。

インストール | Rパッケージ | 必要最小限プラスアルファ

アグリバイオで所有するノートPCは、Rパッケージの2大リポジトリであるCRANBioconductor(およびGithub)から提供されている以下のパッケージ群をインストールしています。 30分程度でインストールが完了します(自宅の光の無線LAN環境)。

1. RStudioを起動

2. パッケージ群のインストール

以下を「R コンソール画面」上でコピー&ペースト。 どこからダウンロードするか?と聞かれるので、その場合は自分から近いサイトを指定。 「no」の行に対するエラーは気にしなくて大丈夫です(Mac対応です)。

#前処理(BiocManagerがなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ
    
#本番1(CRANから提供されているパッケージ群)
BiocManager::install("ape", update=F)
BiocManager::install("bio3d", update=F)
BiocManager::install("blockmodeling", update=F)
BiocManager::install("bit", update=F)
BiocManager::install("cclust", update=F)
BiocManager::install("class", update=F)
BiocManager::install("cluster", update=F)
BiocManager::install("clValid", update=F)
BiocManager::install("corrplot", update=F)
BiocManager::install("data.table", update=F)
BiocManager::install("devtools", update=F)
BiocManager::install("dplyr", update=F)
BiocManager::install("DT", update=F)
BiocManager::install("e1071", update=F)
BiocManager::install("fansi", update=F)
BiocManager::install("ff", update=F)
BiocManager::install("fields", update=F)
BiocManager::install("FinePop", update=F)
BiocManager::install("FinePop2", update=F)
BiocManager::install("FIT", update=F)
BiocManager::install("fitdistrplus", update=F)
BiocManager::install("GeneCycle", update=F)
BiocManager::install("GGally", update=F)
BiocManager::install("glmnet", update=F)
BiocManager::install("gptk", update=F)
BiocManager::install("GSA", update=F)
BiocManager::install("heatmaply", update=F)
BiocManager::install("kernlab", update=F)
BiocManager::install("KernSmooth", update=F)
BiocManager::install("knitr", update=F)
BiocManager::install("mapdata", update=F)
BiocManager::install("maps", update=F)
BiocManager::install("MASS", update=F)
BiocManager::install("microseq", update=F)
BiocManager::install("mixOmics", update=F)
BiocManager::install("MVA", update=F)
BiocManager::install("openxlsx", update=F)
BiocManager::install("Peptides", update=F)
BiocManager::install("phateR", update=F)
BiocManager::install("plotly", update=F)
BiocManager::install("PoissonSeq", update=F)
BiocManager::install("pvclust", update=F)
BiocManager::install("qqman", update=F)
BiocManager::install("R6", update=F)
BiocManager::install("randomForest", update=F)
BiocManager::install("RColorBrewer", update=F)
BiocManager::install("rclipboard", update=F)
BiocManager::install("RCurl", update=F)
BiocManager::install("rentrez", update=F)
BiocManager::install("rgl", update=F)
BiocManager::install("rmarkdown", update=F)
BiocManager::install("rrBLUP", update=F)
BiocManager::install("Rtsne", update=F)
BiocManager::install("samr", update=F)
BiocManager::install("scatterplot3d", update=F)
BiocManager::install("seqinr", update=F)
BiocManager::install("shiny", update=F)
BiocManager::install("shinyBS", update=F)
BiocManager::install("shinycssloaders", update=F)
BiocManager::install("shinydashboard", update=F)
BiocManager::install("shinyWidgets", update=F)
BiocManager::install("som", update=F)
BiocManager::install("st", update=F)
BiocManager::install("survminer", update=F)
BiocManager::install("tidyverse", update=F)
BiocManager::install("umap", update=F)
BiocManager::install("varSelRF", update=F)
BiocManager::install("xfun", update=F)
BiocManager::install("zeallot", update=F)
BiocManager::install("zoo", update=F)

#本番2(Bioconductorから提供されているゲノム配列以外のパッケージ群)
BiocManager::install("affy", update=F)
BiocManager::install("agilp", update=F)
BiocManager::install("annotate", update=F)
BiocManager::install("ArrayExpress", update=F)
BiocManager::install("baySeq", update=F)
BiocManager::install("beadarray", update=F)
BiocManager::install("BeadDataPackR", update=F)
BiocManager::install("betr", update=F)
BiocManager::install("BHC", update=F)
BiocManager::install("biomaRt", update=F)
BiocManager::install("Biostrings", update=F)
BiocManager::install("BSgenome", update=F)
BiocManager::install("bsseq", update=F)
BiocManager::install("Category", update=F)
BiocManager::install("ChIPpeakAnno", update=F)
BiocManager::install("chipseq", update=F)
BiocManager::install("ChIPseqR", update=F)
BiocManager::install("ChIPsim", update=F)
BiocManager::install("clusterStab", update=F)
BiocManager::install("cosmo", update=F)
BiocManager::install("CSAR", update=F)
BiocManager::install("dada2", update=F)
BiocManager::install("DECIPHER", update=F)
BiocManager::install("DEGseq", update=F)
BiocManager::install("DESeq", update=F)
BiocManager::install("DESeq2", update=F)
BiocManager::install("DiffBind", update=F)
BiocManager::install("doMC", update=F)
BiocManager::install("EDASeq", update=F)
BiocManager::install("edgeR", update=F)
BiocManager::install("EGSEA", update=F)
BiocManager::install("EGSEAdata", update=F)
BiocManager::install("gage", update=F)
BiocManager::install("genefilter", update=F)
BiocManager::install("GenomicAlignments", update=F)
BiocManager::install("GenomicFeatures", update=F)
BiocManager::install("GEOquery", update=F)
BiocManager::install("ggplot2", update=F)
BiocManager::install("girafe", update=F)
BiocManager::install("GLAD", update=F)
BiocManager::install("golubEsets", update=F)
BiocManager::install("GSAR", update=F)
BiocManager::install("GSEABase", update=F)
BiocManager::install("GSVA", update=F)
BiocManager::install("GSVAdata", update=F)
BiocManager::install("Heatplus", update=F)
BiocManager::install("illuminaMousev2.db", update=F)
BiocManager::install("impute", update=F)
BiocManager::install("limma", update=F)
BiocManager::install("lumi", update=F)
BiocManager::install("marray", update=F)
BiocManager::install("maSigPro", update=F)
BiocManager::install("MBCluster.Seq", update=F)
BiocManager::install("MLSeq", update=F)
BiocManager::install("msa", update=F)
BiocManager::install("Mulcom", update=F)
BiocManager::install("multtest", update=F)
BiocManager::install("NOISeq", update=F)
BiocManager::install("htSeqTools", update=F)
BiocManager::install("NBPSeq", update=F)
BiocManager::install("OCplus", update=F)
BiocManager::install("org.Hs.eg.db", update=F)
BiocManager::install("parathyroidSE", update=F)
BiocManager::install("pathview", update=F)
BiocManager::install("pcaMethods", update=F)
BiocManager::install("pcot2", update=F)
BiocManager::install("pd.rat230.2", update=F)
BiocManager::install("PGSEA", update=F)
BiocManager::install("phyloseq", update=F)
BiocManager::install("PICS", update=F)
BiocManager::install("plier", update=F)
BiocManager::install("puma", update=F)
BiocManager::install("qrqc", update=F)
BiocManager::install("QuasR", update=F)
BiocManager::install("r3Cseq", update=F)
BiocManager::install("RankProd", update=F)
BiocManager::install("recount", update=F)
BiocManager::install("REDseq", update=F)
BiocManager::install("rMAT", update=F)
BiocManager::install("Rsamtools", update=F)
BiocManager::install("rtracklayer", update=F)
BiocManager::install("safe", update=F)
BiocManager::install("SAGx", update=F)
BiocManager::install("segmentSeq", update=F)
BiocManager::install("seqLogo", update=F)
BiocManager::install("ShortRead", update=F)
BiocManager::install("sigPathway", update=F)
BiocManager::install("SpeCond", update=F)
BiocManager::install("SPIA", update=F)
BiocManager::install("splatter", update=F)
BiocManager::install("SplicingGraphs", update=F)
BiocManager::install("SRAdb", update=F)
BiocManager::install("tweeDEseqCountData", update=F)
BiocManager::install("TCC", update=F)
BiocManager::install("topGO", update=F)
BiocManager::install("TxDb.Hsapiens.UCSC.hg38.knownGene", update=F)
BiocManager::install("vsn", update=F)

#本番2.5(上記以外の手段でインストールするパッケージ)
#devtools::install_github("andrewsali/plotlyBars", upgrade=F)
#devtools::install_github("aroneklund/beeswarm", upgrade=F)
#no
#devtools::install_github("edwindj/ffbase", subdir="pkg", upgrade=F)
#no
#reticulate::py_install("phate", pip=TRUE)
#no

#本番3(Bioconductorから提供されているゲノム配列パッケージ群)
BiocManager::install("BSgenome.Hsapiens.UCSC.hg38", update=F)#ヒトゲノム(hg38)
BiocManager::install("BSgenome.Hsapiens.NCBI.GRCh38", update=F)#ヒトゲノム(hg38)機能ゲノム学の講義で利用するため2022.05.11にコメントアウトを外した
############
	

3. インストール確認

以下を「R コンソール画面」上でコピー&ペースト。 代表的なパッケージ群が正しくインストールされたかを確認しています。 ここの実行結果(特に2回目)で何のエラーメッセージも出なければOK。もし出たら、 「インストール | Rパッケージ | 個別(2018年11月以降)」 を参考にして、エラーが出たパッケージのインストールを個別に行ってください。

#1回目
library(ape)
library(baySeq)
library(beeswarm)
library(bio3d)
library(biomaRt)
library(Biostrings)
library(bit)
library(BSgenome)
library(BSgenome.Hsapiens.UCSC.hg38)
library(BSgenome.Hsapiens.NCBI.GRCh38)
library(cclust)
library(cluster)
library(clusterStab)
library(corrplot)
library(dada2)
library(data.table)
library(DESeq2)
library(devtools)
library(dplyr)
library(DT)
library(e1071)
library(edgeR)
library(ff)
library(fields)
library(FinePop)
library(FinePop2)
library(FIT)
library(fitdistrplus)
library(GenomicAlignments)
library(GenomicFeatures)
library(GGally)
library(ggplot2)
library(glmnet)
library(GSAR)
library(GSVA)
library(GSVAdata)
library(heatmaply)
library(KernSmooth)
library(knitr)
library(limma)
library(mapdata)
library(maps)
library(MASS)
library(MBCluster.Seq)
library(microseq)
library(msa)
library(MVA)
library(openxlsx)
library(org.Hs.eg.db)
library(pcaMethods)
library(Peptides)
library(phateR)
library(phyloseq)
library(plotly)
library(qqman)
library(qrqc)
library(QuasR)
library(R6)
library(randomForest)
library(RColorBrewer)
library(RCurl)
library(recount)
library(rgl)
library(rmarkdown)
library(rrBLUP)
library(Rsamtools)
library(rentrez)
library(rtracklayer)
library(Rtsne)
library(scatterplot3d)
library(seqinr)
library(seqLogo)
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ShortRead)
library(som)
library(splatter)
library(SRAdb)
library(TCC)
library(tidyverse)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(BSgenome.Hsapiens.NCBI.GRCh38)
library(umap)
library(zoo)

#2回目(ここの実行結果でエラーが出てなければOK)
library(ape)
library(baySeq)
library(beeswarm)
library(bio3d)
library(biomaRt)
library(Biostrings)
library(bit)
library(BSgenome)
library(BSgenome.Hsapiens.UCSC.hg38)
library(cclust)
library(cluster)
library(clusterStab)
library(corrplot)
library(dada2)
library(data.table)
library(DESeq2)
library(devtools)
library(dplyr)
library(DT)
library(e1071)
library(edgeR)
library(ff)
library(fields)
library(FinePop)
library(FinePop2)
library(FIT)
library(fitdistrplus)
library(GenomicAlignments)
library(GenomicFeatures)
library(GGally)
library(ggplot2)
library(glmnet)
library(GSAR)
library(GSVA)
library(GSVAdata)
library(heatmaply)
library(KernSmooth)
library(knitr)
library(limma)
library(mapdata)
library(maps)
library(MASS)
library(MBCluster.Seq)
library(microseq)
library(msa)
library(MVA)
library(openxlsx)
library(org.Hs.eg.db)
library(pcaMethods)
library(phyloseq)
library(Peptides)
library(phateR)
library(plotly)
library(qqman)
library(qrqc)
library(QuasR)
library(R6)
library(randomForest)
library(RColorBrewer)
library(RCurl)
library(recount)
library(rgl)
library(rmarkdown)
library(rrBLUP)
library(Rsamtools)
library(rentrez)
library(rtracklayer)
library(Rtsne)
library(scatterplot3d)
library(seqinr)
library(seqLogo)
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ShortRead)
library(som)
library(splatter)
library(SRAdb)
library(TCC)
library(tidyverse)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(umap)
library(zoo)
############
	

インストール | Rパッケージ | 個別(2018年11月以降)

文字通り、Rのパッケージを個別にインストールするやり方を示します。 このウェブページでは、Bioconductorから提供されているパッケージを数多く利用しています。 2018年10月31日リリースのBioconductor 3.8より、インストール方法が変更されましたのでご注意ください。 具体的には、biocLiteから、BiocManager::installを利用するやり方に変更されました。 「BiocManager::install」は「BiocManagerというパッケージ中にあるinstall関数」という意味です。 intallという関数は他のパッケージでも提供されている可能性があるため、「どのパッケージが提供するinstall関数か」を明示したい場合に玄人がよく利用します。

1. ゼブラフィッシュゲノムのパッケージ(BSgenome.Drerio.UCSC.danRer7)をインストールしたい場合:

400MB程度あります...。

param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

2. TxDb.Rnorvegicus.UCSC.rn5.refGeneパッケージのインストールをしたい場合:

param <- "TxDb.Rnorvegicus.UCSC.rn5.refGene"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

3. TxDb.Hsapiens.UCSC.hg38.knownGeneパッケージのインストールをしたい場合:

param <- "TxDb.Hsapiens.UCSC.hg38.knownGene"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

4. 線虫ゲノムのパッケージ(BSgenome.Celegans.UCSC.ce6)をインストールしたい場合:

20MB程度です。

param <- "BSgenome.Celegans.UCSC.ce6"  #パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

5. TxDb.Celegans.UCSC.ce6.ensGeneパッケージのインストールをしたい場合:

param <- "TxDb.Celegans.UCSC.ce6.ensGene"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

6. 大腸菌ゲノムのパッケージ(BSgenome.Ecoli.NCBI.20080805)をインストールしたい場合:

20MB程度です。

param <- "BSgenome.Ecoli.NCBI.20080805"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

7. イヌゲノムのパッケージ(BSgenome.Cfamiliaris.UCSC.canFam3)をインストールしたい場合:

550MB程度です。

param <- "BSgenome.Cfamiliaris.UCSC.canFam3"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

8. ショウジョウバエゲノムのパッケージ(BSgenome.Dmelanogaster.UCSC.dm2)をインストールしたい場合:

30MB程度です。

param <- "BSgenome.Dmelanogaster.UCSC.dm2"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

9. イネゲノムのパッケージ(BSgenome.Osativa.MSU.MSU7)をインストールしたい場合:

100MB程度です。

param <- "BSgenome.Osativa.MSU.MSU7"#パッケージ名を指定

#本番
BiocManager::install(param, update=F)  #paramで指定したパッケージのインストール

#後処理(ウェブサイト上で見えているバージョンとの比較)
BiocManager::valid(param)              #TRUEはOK、too newでもまあOK、out-of-dateなら注意
packageVersion(param)                  #バージョン情報を表示
	

インストール | Rパッケージ | 個別(2018年11月以前)

このウェブページでは、Bioconductorから提供されているパッケージを数多く利用していますが、 2018年10月31日リリースのBioconductor 3.8よりインストール方法が変更されました。 ここでは、2018年11月までの主な「Rパッケージを個別にインストールするやり方」を示します。

1. ゼブラフィッシュゲノムのパッケージ(BSgenome.Drerio.UCSC.danRer7)をインストールしたい場合:

400MB程度あります...。

param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定

#本番
source("http://bioconductor.org/biocLite.R")#おまじない
biocLite(param, suppressUpdates=TRUE)  #おまじない
	

2. TxDb.Rnorvegicus.UCSC.rn5.refGeneパッケージのインストールをしたい場合:

param <- "TxDb.Rnorvegicus.UCSC.rn5.refGene"#パッケージ名を指定

#本番
source("http://bioconductor.org/biocLite.R")#おまじない
biocLite(param, suppressUpdates=TRUE)  #おまじない
	

基本的な利用法

以下は、インストール | についてを参考にして必要なパッケージのインストールが完了済みのヒトを対象として、 このウェブページの基本的な利用法を簡単に解説したものです。

サンプルデータ

  1. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)

    「Kidney 7 samples vs Liver 7 samples」のRNA-seqの遺伝子発現行列データ(SupplementaryTable2.txt)です。 サンプルは二つの濃度(1.5 pM and 3 pM)でシーケンスされており、「3 pMのものが5 samples vs. 5 samples」、「1.5 pMのものが2 samples vs. 2 samples」という構成です。 SupplementaryTable2.txtをエクセルで開くと、7列目以降に発現データがあることがわかります。詳細な情報は以下の通りです(原著論文中のFigure 1からもわかります):

  2. 7列目:R1L1Kidney (3 pM)
    8列目:R1L2Liver (3 pM)
    9列目:R1L3Kidney (3 pM)
    10列目:R1L4Liver (3 pM)
    11列目:R1L6Liver (3 pM)
    12列目:R1L7Kidney (3 pM)
    13列目:R1L8Liver (3 pM)
    14列目:R2L1Liver (1.5 pM)
    15列目:R2L2Kidney (3 pM)
    16列目:R2L3Liver (3 pM)
    17列目:R2L4Kidney (1.5 pM)
    18列目:R2L6Kidney (3 pM)
    19列目:R2L7Liver (1.5 pM)
    20列目:R2L8Kidney (1.5 pM)
    
  3. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)

    Supplementary table 2のデータを取り扱いやすく加工したデータです。 オリジナルのものは最初の6列が発現データ以外のものだったり、7列目以降も二種類のサンプルが交互に出てくるなど若干R上で表現しずらかったため、以下のようにわかりやすくしたものです。 つまり、サンプルを3pMのものだけにして、「1列目:Genename, 2-6列目:Kidney群, 7-11列目:Liver群」と変更したSupplementaryTable2_changed.txtです:

  4. 2列目:R1L1Kidney (3 pM)
    3列目:R1L3Kidney (3 pM)
    4列目:R1L7Kidney (3 pM)
    5列目:R2L2Kidney (3 pM)
    6列目:R2L6Kidney (3 pM)
    7列目:R1L2Liver (3 pM)
    8列目:R1L4Liver (3 pM)
    9列目:R1L6Liver (3 pM)
    10列目:R1L8Liver (3 pM)
    11列目:R2L3Liver (3 pM)
    
  5. Illumina/36bp/single-end/human (SRA000299) data (Marioni et al., Genome Res., 2008)

    上記SupplementaryTable2_changed.txtをさらに加工したデータ。 NGSデータは(マイクロアレイの黎明期と同じく)金がかかりますので(technical and/or biological) replicatesを簡単には増やせませんので、「1サンプル vs. 1サンプル」比較の局面がまだまだあろうかと思います。 そこで、上記ファイルの2-6列目と7-11列目をそれぞれまとめた(総和をとった)ものSupplementaryTable2_changed2.txtです。

  6. カウントデータ(SupplementaryTable2_changed.txt)と長さ情報ファイル(ens_gene_46_length.txt)を読み込んで、 以下を実行して、「配列長情報を含み、カウント数の和が0より大きい行のみ抽出した結果」です。カウントデータファイル(data_marioni.txt)と配列長情報ファイル(length_marioni.txt)。
    in_f1 <- "SupplementaryTable2_changed.txt"#入力ファイル名を指定してin_f1に格納(カウントデータファイル)
    in_f2 <- "ens_gene_46_length.txt"      #入力ファイル名を指定してin_f2に格納(長さ情報ファイル)
    out_f1 <- "data_marioni.txt"           #出力ファイル名を指定してout_f1に格納
    out_f2 <- "length_marioni.txt"         #出力ファイル名を指定してout_f2に格納
    
    #入力ファイルの読み込み
    data <- read.table(in_f1, header=TRUE, row.names=1, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    len <- read.table(in_f2, header=TRUE, sep="\t", quote="")#in_f2で指定したファイルの読み込み
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    
    #本番(共通IDのもののみ抽出)
    rownames(len) <- len[,1]               #行の名前としてIDを与えている
    common <- intersect(rownames(len), rownames(data))#共通IDをcommonに格納
    data <- data[common,]                  #共通IDのもののみ抽出
    len <- len[common,]                    #共通IDのもののみ抽出
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    
    #本番(ゼロカウントデータのフィルタリング)
    obj <- (rowSums(data) > 0)             #条件を満たすかどうかを判定した結果をobjに格納
    data <- data[obj,]                     #objがTRUEとなる要素のみ抽出した結果をdataに格納
    len <- len[obj,]                       #objがTRUEとなる要素のみ抽出した結果をlenに格納
    dim(data)                              #行数と列数を表示
    dim(len)                               #行数と列数を表示
    head(data)                             #確認してるだけです
    head(len)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    write.table(len, out_f2, sep="\t", append=F, quote=F, row.names=F)#lenの中身を指定したファイル名で保存
    	
  7. ABI_SOLiD/25-35bp/single-end/mouse (SRA000306; EB vs. ES) data (Cloonan et al., Nat Methods, 2008)
  8. Illumina/50bp/paired-end/mouse (SRA012213; liver) data (Robertson et al., Nat Methods, 2010)
  9. Illumina/35bp/single-end/human (SRA010153; MAQC) data (Bullard et al., BMC Bioinformatics, 2010)

    SRR037439から得られるFASTQファイルの最初の2000行分を抽出したMAQC2 brainデータ

    非圧縮版:SRR037439.fastq

    gzip圧縮版:SRR037439.fastq.gz

  10. NBPSeqパッケージ(Di et al., SAGMB, 10:art24, 2011)中の ArabidopsisのBiological replicatesデータ(G1群3サンプル vs. G2群3サンプル; Cumbie et al., PLoS One, 2011)です。

    26,221 genes×6 samplesの「複製あり」タグカウントデータ(data_arab.txt)

    オリジナルは"AT4G32850"というIDのものが重複して存在していたため、19520行目のデータを除去してタブ区切りテキストファイルにしています。

  11. ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011)

    マッピング済みの遺伝子発現行列形式のデータセットを多数提供しています。

  12. Yeastの二群間比較用データ(2 mutant strains vs. 2 wild-types; technical replicates)

    7065行 × 4列のyeast RNA-seqデータ(data_yeast_7065.txt)

    yeastRNASeq (Lee et al., PLoS Genet., 2008)がインストールされていれば、R Console画面上で以下のコマンドのコピペでも取得可能です:

    library(yeastRNASeq)                   #パッケージの読み込み
    data(geneLevelData)                    #yeastRNASeqパッケージ中で提供されているデータをロード
    dim(geneLevelData)                     #行数と列数を表示
    head(geneLevelData)                    #最初の数行を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(geneLevelData), geneLevelData)#geneLevelDataの「rownames情報(i.e., 遺伝子名)」と「カウントデータ」の行列を列方向で結合した結果をtmpに格納
    write.table(tmp, "data_yeast_7065.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  13. 上記Yeastの二群間比較用データを用いてGC-content normalizationなどを行う場合に必要な情報

    yeast genes (SGD ver. r64)のGC含量(yeastGC_6717.txt)やlength情報(yeastLength_6717.txt)。
      EDASeq (Risso et al., BMC Bioinformatics, 2011)がインストールされていれば、R Console画面上で以下のコマンドのコピペでも取得可能です:

    library(EDASeq)                        #パッケージの読み込み
    data(yeastGC)                          #yeastRNASeqパッケージ中で提供されているyeastのGC含量情報をロード
    length(yeastGC)                        #要素数を表示
    head(yeastGC)                          #最初の数個を表示
    
    data(yeastLength)                      #yeastRNASeqパッケージ中で提供されているyeastの配列長情報をロード
    length(yeastLength)                    #要素数を表示
    head(yeastLength)                      #最初の数個を表示
    
    #それぞれ別々のファイルに保存
    tmp <- cbind(names(yeastGC), yeastGC)  #yeastGCの「names属性情報」と「GC含量」のベクトルを列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastGC_6717.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(names(yeastLength), yeastLength)#yeastLengthの「names属性情報」と「配列長」のベクトルを列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastLength_6717.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  14. 「10.」と「11.」のファイルをもとに共通遺伝子(6685個)のみからなるのサブセットにしたファイル:

    data_yeast_common_6685.txt

    yeastGC_common_6685.txt

    yeastLength_common_6685.txt)

    以下のコピペでも得ることができます。

    #必要なパッケージをロード
    library(yeastRNASeq)                   #パッケージの読み込み
    library(EDASeq)                        #パッケージの読み込み
    
    #count dataやGC含量情報(SGD ver. r64)の読み込みとラベル情報の作成
    data(geneLevelData)                    #yeastRNASeqパッケージ中で提供されているカウントデータ(geneLevelData)をロード
    data(yeastGC)                          #EDASeqパッケージ中で提供されているyeastのGC含量情報(yeastGC)をロード
    data(yeastLength)                      #EDASeqパッケージ中で提供されているyeastの配列長情報(yeastLength)をロード
    
    #カウントデータ情報(geneLevelData)とGC含量情報(yeastGC)から共通して存在するサブセットを(同じ遺伝子名の並びで)取得
    common <- intersect(rownames(geneLevelData), names(yeastGC))#yeastRNASeqパッケージ中で提供されているデータをロード
    data <- as.data.frame(geneLevelData[common, ])#6685個の共通遺伝子分のカウントデータ行列をデータフレーム形式でdataに格納
    GC <- data.frame(GC = yeastGC[common]) #6685個の共通遺伝子分のGC含量ベクトルをデータフレーム形式でGCに格納
    length <- data.frame(Length = yeastLength[common])#6685個の共通遺伝子分の配列長ベクトルをデータフレーム形式でlengthに格納
    head(rownames(data))                   #行列dataの行名(rownames)情報の最初の数個を表示
    head(rownames(GC))                     #行列GCの行名(rownames)情報の最初の数個を表示
    head(rownames(length))                 #行列lengthの行名(rownames)情報の最初の数個を表示
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, "data_yeast_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(GC), GC)         #「rownames情報」と「GC含量情報」を列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastGC_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    tmp <- cbind(rownames(length), length) #「rownames情報」と「配列長情報」を列方向で結合した結果をtmpに格納
    write.table(tmp, "yeastLength_common_6685.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  15. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。
      10,000 genes×6 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3.txt)
      「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプル分からなります。
      全10,000遺伝子中の最初の2,000個(gene_1〜gene_2000まで)が発現変動遺伝子(DEG)です。
      全2,000 DEGsの内訳:最初の90%分(gene_1〜gene_1800)がG1群で4倍高発現、残りの10%分(gene_1801〜gene_2000)がG2群で4倍高発現
      以下のコピペでも(数値は違ってきますが)同じ条件のシミュレーションデータを作成可能です。:
    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.2,#シミュレーションデータの作成
                 DEG.assign = c(0.9, 0.1), #シミュレーションデータの作成
                 DEG.foldchange = c(4, 4), #シミュレーションデータの作成
                 replicates = c(3, 3))     #シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, "data_hypodata_3vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  16. 上記のTCCパッケージ中のBiological replicatesを模倣した 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3」の計6サンプルからなるシミュレーションデータから、1列目と4列目のデータを抽出した「複製なし」タグカウントデータ(data_hypodata_1vs1.txt)
      よって、「G1_rep1, G2_rep1」の計2サンプル分のみからなります。
      以下のコピペでも(数値は違ってきますが)同じ条件のシミュレーションデータを作成可能です。:
    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.2,#シミュレーションデータの作成
                 DEG.assign = c(0.9, 0.1), #シミュレーションデータの作成
                 DEG.foldchange = c(4, 4), #シミュレーションデータの作成
                 replicates = c(1, 1))     #シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, "data_hypodata_1vs1.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  17. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル)です。 10,000 genes×9 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3vs3.txt) 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3, G3_rep1, G3_rep2, G3_rep3」の計9サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の70%分(gene_1〜gene_2100)がG1群で3倍高発現、(2)次の20%分(gene_2101〜gene_2700)がG2群で10倍高発現、(3)残りの10%分(gene_2701〜gene_3000)がG3群で6倍高発現 以下のコピペでも取得可能です。

    out_f <- "data_hypodata_3vs3vs3.txt"   #出力ファイル名を指定してout_fに格納
    param_replicates <- c(3, 3, 3)         #G1, G2, G3群のサンプル数をそれぞれ指定
    param_Ngene <- 10000                   #全遺伝子数を指定
    param_PDEG <- 0.3                      #発現変動遺伝子の割合を指定    
    param_FC <- c(3, 10, 6)                #G1, G2, G3群の発現変動の度合い(fold-change)をそれぞれ指定    
    param_DEGassign <- c(0.7, 0.2, 0.1)    #DEGのうちG1, G2, G3群で高発現なものの割合をそれぞれ指定   
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータの作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=param_Ngene,#シミュレーションデータの作成
                PDEG=param_PDEG,           #シミュレーションデータの作成
                DEG.assign=param_DEGassign,#シミュレーションデータの作成
                DEG.foldchange=param_FC,   #シミュレーションデータの作成
                replicates=param_replicates)#シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  18. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ(G1群2サンプル vs. G2群4サンプル vs. G3群3サンプル)です。 10,000 genes×9 samplesの「複製あり」タグカウントデータ(data_hypodata_2vs4vs3.txt) 「G1_rep1, G1_rep2, G2_rep1, G2_rep2, G2_rep3, G2_rep4, G3_rep1, G3_rep2, G3_rep3」の計9サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の70%分(gene_1〜gene_2100)がG1群で3倍高発現、(2)次の20%分(gene_2101〜gene_2700)がG2群で10倍高発現、(3)残りの10%分(gene_2701〜gene_3000)がG3群で6倍高発現 以下のコピペでも取得可能です。

    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(2, 4, 3))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, "data_hypodata_2vs4vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  19. Illumina/35bp/single-end/human (SRA000299; kidney vs. liver) data (Marioni et al., Genome Res., 2008)
  20. ランダムな塩基配列から生成したリファレンスゲノム配列データ(ref_genome.fa)。 48, 160, 100, 123, 100 bpの配列長をもつ、計5つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を利用し、chr3の配列と同じものをchr5としてコピーして作成したのち、2番目と7番目の塩基置換を行っています。 そのため、実際に指定するのは最初の4つ分の配列長のみです。

    out_f <- "ref_genome.fa"               #出力ファイル名を指定してout_fに格納
    param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容
    param4 <- 3                            #コピーを作成したい配列番号を指定
    param5 <- c(2, 7)                      #コピー先配列の塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    enkichikan <- function(fa, p) {        #関数名や引数の作成
      t <- substring(fa, p, p)             #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(fa, p, p) <- t_c           #置換
      return(fa)                           #置換後のデータを返す
    }
    
    #本番(配列生成)
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    hoge <- NULL                           #hogeというプレースホルダの作成
    for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
        hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
    }
    
    #本番(param4で指定した配列をchr5としてコピーし、param5で指定した位置の塩基をそれぞれ置換)
    hoge <- c(hoge, hoge[param4])          #param4で指定した配列を追加している
    hoge[length(param_len_ref)+1] <- enkichikan(hoge[length(param_len_ref)+1], param5[1])#塩基置換
    hoge[length(param_len_ref)+1] <- enkichikan(hoge[length(param_len_ref)+1], param5[2])#塩基置換
    
    #本番(DNAStringSet形式に変換)
    fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
    names(fasta) <- paste(param_desc, 1:length(hoge), sep="")#description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  21. 上記リファレンスゲノム配列データ(ref_genome.fa)に対してbasic alignerでマッピングする際の動作確認用RNA-seqデータ (sample_RNAseq1.fa)とそのgzip圧縮ファイル(sample_RNAseq1.fa.gz)。 リファレンス配列を読み込んで、list_sub3.txtで与えた部分配列を抽出したものです。 どこに置換を入れているかがわかっているので、basic alignerで許容するミスマッチ数を変えてマップされる or されないの確認ができます。 DNAStringSetオブジェクトを入力として塩基置換を行うDNAString_chartr関数を用いて、最後のリードのみ4番目の塩基にミスマッチを入れています。

    in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub3.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "sample_RNAseq1.fa"           #出力ファイル名を指定してout_fに格納
    param <- 4                             #塩基置換したい位置を指定
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #塩基置換関数の作成
    DNAString_chartr <- function(fa, p) {  #関数名や引数の作成
      str_list <- as.character(fa)         #文字列に変更
      t <- substring(str_list, p, p)       #置換したい位置の塩基を取りだす
      t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
      substring(str_list, p, p) <- t_c     #置換
      fa_r <- DNAStringSet(str_list)       #DNAStringSetオブジェクトに戻す
      names(fa_r) <- names(fa)             #description部分の情報を追加
      return(fa_r)                         #置換後のデータを返す
    }
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(最後のリードのparam番目の塩基に置換を入れている)
    fasta[nrow(posi)] <- DNAString_chartr(fasta[nrow(posi)], param)#指定した位置の塩基置換を実行した結果をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分の作成)
    description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  22. 上記リファレンスゲノム配列データ(ref_genome.fa)に対してbasic alignerでマッピングする際の動作確認用RNA-seqデータ(sample_RNAseq2.fa)とそのgzip圧縮ファイル(sample_RNAseq2.fa.gz)。
     

    リファレンス配列を読み込んで、list_sub4.txtで与えた部分配列を抽出したものです。 基本的にジャンクションリードがbasic alignerでマップされず、splice-aware alignerでマップされることを示すために作成したものです。

    in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub4.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "sample_RNAseq2.fa"           #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #塩基配列用プレースホルダhogeを作成
    hoge_d <- NULL                         #description用プレースホルダhoge_dを作成
    for(i in 1:nrow(posi)){                #nrow(posi)回だけループを回す
      uge <- NULL                          #ugeを初期化
      for(j in 1:(length(posi[i,])/3)){    #ncol(posi)/3回だけループを回す
        obj <- names(fasta)==posi[i,3*(j-1)+1]#条件を満たすかどうかを判定した結果をobjに格納
        uge <- paste(uge, subseq(fasta[obj],  #subseq関数を用いてobjがTRUEとなるもののみに対して、
                      start=posi[i,3*(j-1)+2],#「3*(j-1)+2」列目で指定したstart位置から、
                       end=posi[i,3*(j-1)+3]),#「3*(j-1)+3」列目で指定したend位置で与えた範囲の部分配列を取得し
                       sep="")                #それをugeに連結
      }
      hoge <- append(hoge, uge)            #hogeにugeを連結
      
      uge_d <- as.character(posi[i,1])     #uge_dの初期値を与えている
      for(j in 2:(length(posi[i,]))){      #length(posi[i,])回数分だけループを回す
        uge_d <- paste(uge_d, as.character(posi[i,j]), sep="_")#description情報の作成
      }
      hoge_d <- append(hoge_d, uge_d)      #hoge_dにuge_dを連結
    }
    
    #後処理(DNAStringSet形式に変換)
    fasta <- DNAStringSet(hoge)            #行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- hoge_d                 #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  23. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub.gtf)です。

    EnsemblのFTPサイトから得たヒトの遺伝子アノテーションファイル("Homo_sapiens.GRCh37.73.gtf.gz")を ここからダウンロードして得て解凍("Homo_sapiens.GRCh37.73.gtf")したのち、 (解凍後のファイルサイズは500MB、2,268,089行×9列のファイルなので)以下のコピペで、ランダムに50,000行分を非復元抽出して得たファイルです。

    in_f <- "Homo_sapiens.GRCh37.73.gtf"   #入力ファイル名を指定してin_fに格納(目的のタブ区切りテキストファイル)
    out_f <- "human_annotation_sub.gtf"    #出力ファイル名を指定してout_fに格納
    param <- 50000                         #(入力ファイルの行数以下の)得たい行数を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #本番
    hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納
    out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
    	
  24. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub2.gtf)です。

    GTFファイル(human_annotation_sub.gtf)の各行の左端に"chr"を挿入したファイルです。

    in_f <- "human_annotation_sub.gtf"     #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
    out_f <- "human_annotation_sub2.gtf"   #出力ファイル名を指定してout_fに格納
    param <- "chr"                         #挿入したい文字列を指定
    
    #入力ファイルの読み込み
    data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
    
    #本番(文字列挿入)
    data[,1] <- paste(param, data[,1], sep="")#dataオブジェクトの1列目の左側にparamで指定した文字列を挿入
    
    #ファイルに保存
    write.table(data, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#dataの中身を指定したファイル名で保存
    	
  25. GTF (General Transfer Format)形式のヒトサンプルファイル(human_annotation_sub3.gtf)です。

    ヒトゲノム配列("BSgenome.Hsapiens.UCSC.hg19")中の染色体名と一致する遺伝子アノテーション情報のみhuman_annotation_sub2.gtfから抽出したファイルです。

    in_f1 <- "human_annotation_sub2.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
    in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)
    out_f <- "human_annotation_sub3.gtf"   #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み(GFF/GTFファイル)
    data <- read.table(in_f1, header=FALSE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
    dim(data)                              #オブジェクトdataの行数と列数を表示
    
    #前処理(リファレンス配列の染色体名を抽出)
    param <- in_f2                         #paramという名前で取り扱いたいだけです
    library(param, character.only=T)       #paramで指定したパッケージの読み込み
    tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
    hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
    keywords <- seqnames(hoge)             #染色体名情報を抽出した結果をkeywordsに格納
    keywords                               #確認してるだけです
    
    #本番
    obj <- is.element(as.character(data[,1]), keywords)#in_f1で読み込んだファイル中の1列目の文字列ベクトル中の各要素がベクトルkeywords中に含まれるか含まれないか(TRUE or FALSE)の情報をobjに格納(集合演算をしている)
    out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
    dim(out)                               #オブジェクトoutの行数と列数を表示
    
    #ファイルに保存
    write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身をout_fで指定したファイル名で保存
    	
  26. Illumina/75bp/single-end/human (SRA061145) data (Wang et al., Nucleic Acids Res., 2013)

    ヒト肺の3群間比較用データ:normal human bronchial epithelial (HBE) cells, human lung cancer A549, and H1299 cells

  27. Illumina HiSeq 2000/100bp/paired-end/human (GSE42960) data (Chan et al., Hum. Mol. Genet., 2013)

    ヒトPBMCというサンプルの2群間比較用データ:未処理群2サンプル (FRDA05-UT and FRDA19.UTB) vs. ニコチンアミド処理群2サンプル(FRDA05-NicoとFRDA19.NB)。 原著論文中では、GSE42960のみが示されていますが、 日米欧三極のDB( SRP017580 by SRA; SRP017580 by DRA; SRP017580 by ENA) からも概観できます。

    ペアエンドデータのSRR633902_1.fastqを入力として、最初の1000リード分を抽出することで、 SRR633902_1_sub.fastqを作成しています。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

    in_f <- "SRR633902_1.fastq.gz"         #入力ファイル名を指定してin_fに格納
    out_f <- "SRR633902_1_sub.fastq"       #出力ファイル名を指定してout_fに格納
    param <- 1000                          #抽出したいリード数を指定
    
    #必要なパッケージをロード
    library(ShortRead)                     #パッケージの読み込み
    
    #入力ファイルの読み込み
    fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
    fastq                                  #fastq情報を表示
    
    #本番(サブセットの抽出)
    fastq <- fastq[1:param]                #サブセットを抽出
    fastq                                  #fastq情報を表示
    
    #ファイルに保存
    writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
    	
  28. Illumina Genome Analyzer II/54bp/single-end/human (SRP017142; GSE42212) data (Neyret-Kahn et al., Genome Res., 2013)

    ヒトfibroblastsの2群間比較用データ:3 proliferative samples vs. 3 Ras samples

  29. Illumina HiSeq 2000 (GPL14844)/50bp/single-end/Rat (SRP037986; GSE53960) data (Yu et al., Nat Commun., 2014)

    ラットの10組織×雌雄(2種類)×4種類の週齢(2, 6, 21, 104 weeks)×4 biological replicatesの計320サンプルからなるデータ。

  30. Illumina GAIIx/76bp/paired-end/Drosophila or Illumina HiSeq 2000/100bp/paired-end/Drosophila (SRP009459; GSE33905) data (Graveley et al., Nature, 2011; Brown et al., Nature, 2014)

    ショウジョウバエの様々な組織のデータ(modENCODE)。29 dissected tissue samplesのstrand-specific, paired-endのbiological replicates (duplicates)だそうです。

  31. Illumina HiSeq 2000/36bp/single-end/Arabidopsis (GSE36469) data (Huang et al., Development, 2012)

    シロイヌナズナの2群間比較用データ:4 DEX-treated vs. 4 mock-treated

    原著論文中では、GSE36469のみが示されていますが、 日米欧三極のDB( SRP011435 by SRA; SRP011435 by DRA; SRP011435 by ENA) からも概観できます。

  32. PacBio/xxx bp/Human (ERP003225) data (Sharon et al., Nat Biotechnol., 2013)

    ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  33. PacBio/xxx bp/Chicken (SRP038897 by DRA; SRP038897 by ENA; SRP038897 by SRA) data (Sharon et al., PLoS One, 2014)

    ニワトリの長鎖RNA-seqデータです。配列長はリードによって異なります。

  34. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample32_ref.fastasample32_ngs.fasta)です。

    50塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を10リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample32_ref.fastaで、 10リードからなる仮想NGSデータがsample32_ngs.fastaです。 リード長20塩基で10リードなのでトータル200塩基となり、50塩基からなる元のゲノム配列の4倍シーケンスしていることになります(4X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample32_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample32_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 50                    #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 10                    #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  35. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample33_ref.fastasample33_ngs.fasta)です。

    1000塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を200リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample33_ref.fastaで、 200リードからなる仮想NGSデータがsample33_ngs.fastaです。 リード長20塩基で200リードなのでトータル4,000塩基となり、1,000塩基からなる元のゲノム配列の4倍シーケンスしていることになります(4X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。 2014年から提供していたものと下記のコピペ実行結果が異なっていることがわかったので、2020年3月16日に中身を変更しました(おそらく昔はset.seedを付けていなかったのだと思われます)。

    out_f1 <- "sample33_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample33_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 1000                  #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 200                   #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  36. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample34_ref.fastasample34_ngs.fasta)です。

    1000塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を500リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample34_ref.fastaで、 500リードからなる仮想NGSデータがsample34_ngs.fastaです。 リード長20塩基で500リードなのでトータル10,000塩基となり、1,000塩基からなる元のゲノム配列の10倍シーケンスしていることになります(10X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。 2014年から提供していたものと下記のコピペ実行結果が異なっていることがわかったので、2020年3月16日に中身を変更しました(おそらく昔はset.seedを付けていなかったのだと思われます)。

    out_f1 <- "sample34_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample34_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 1000                  #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 20                    #リード長を指定
    param_num_ngs <- 500                   #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  37. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample35_ref.fastasample35_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、40塩基長の部分配列を2500リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample35_ref.fastaで、 2500リードからなる仮想NGSデータがsample35_ngs.fastaです。 リード長40塩基で2500リードなのでトータル100,000塩基となり、10,000塩基からなる元のゲノム配列の10倍シーケンスしていることになります(10X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample35_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample35_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 40                    #リード長を指定
    param_num_ngs <- 2500                  #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  38. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample36_ref.fastasample36_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、80塩基長の部分配列を5000リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample36_ref.fastaで、 5,000リードからなる仮想NGSデータがsample36_ngs.fastaです。 リード長80塩基で5,000リードなのでトータル400,000塩基となり、10,000塩基からなる元のゲノム配列の40倍シーケンスしていることになります(40X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample36_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample36_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 80                    #リード長を指定
    param_num_ngs <- 5000                  #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  39. k-mer解析用のランダム配列から生成したFASTA形式ファイル(sample37_ref.fastasample37_ngs.fasta)です。

    10000塩基の長さのリファレンス配列を生成したのち、100塩基長の部分配列を10000リード分だけランダム抽出したものです。 塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。 リファレンス配列(仮想ゲノム配列)がsample37_ref.fastaで、 10,000リードからなる仮想NGSデータがsample37_ngs.fastaです。 リード長100塩基で10,000リードなのでトータル1,000,000塩基となり、10,000塩基からなる元のゲノム配列の100倍シーケンスしていることになります(100X coverageに相当)。 イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    out_f1 <- "sample37_ref.fasta"         #出力ファイル名を指定してout_f1に格納
    out_f2 <- "sample37_ngs.fasta"         #出力ファイル名を指定してout_f2に格納
    param_len_ref <- 10000                 #リファレンス配列の長さを指定
    narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
    param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
    param_len_ngs <- 100                   #リード長を指定
    param_num_ngs <- 10000                 #リード数を指定
    param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #本番(リファレンス配列生成)
    set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
    ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
    reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
    reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
    names(reference) <- param_desc         #description行に相当する記述を追加している
    reference                              #確認してるだけです
    
    #本番(シミュレーションデータ生成)
    s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
    s_posi                                 #確認してるだけです
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
        hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    
    #後処理(description部分の作成)
    description <- paste(param_desc, s_posi, (s_posi+param_len_ngs-1), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存(仮想リファレンス配列と仮想NGS配列)
    writeXStringSet(reference, file=out_f1, format="fasta", width=50)#referenceの中身を指定したファイル名で保存
    writeXStringSet(fasta, file=out_f2, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  40. PacBio/xxx bp/Human (SRP036136) data (Tilgner et al., PNAS, 2014)

    ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  41. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ (G1群3サンプル vs. G2群3サンプル vs. G3群3サンプル vs. G4群3サンプル vs. G5群3サンプル)です。

    10,000 genes×15 samplesの「複製あり」タグカウントデータ(data_hypodata_3vs3vs3vs3vs3.txt) 「G1_rep1, G1_rep2, G1_rep3, G2_rep1, G2_rep2, G2_rep3, G3_rep1, G3_rep2, G3_rep3, G4_rep1, G4_rep2, G4_rep3, G5_rep1, G5_rep2, G5_rep3」の計15サンプル分からなります。 全10,000遺伝子(Ngene=10000)中の最初の2,000個(gene_1〜gene_2000まで; 20%なのでPDEG=0.2)が発現変動遺伝子(DEG)です。 全2,000 DEGsの内訳:(1)最初の50%分(gene_1〜gene_1000)がG1群で5倍高発現、 (2)次の20%分(gene_1001〜gene_1400)がG2群で10倍高発現、 (3)次の15%分(gene_1401〜gene_1700)がG3群で8倍高発現、 (4)次の10%分(gene_1701〜gene_1900)がG4群で12倍高発現、 (5)残りの5%分(gene_1901〜gene_2000)がG5群で7倍高発現。 以下のコピペでも取得可能です。

    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=10000,PDEG=0.2,#全遺伝子数とDEGの割合を指定
             DEG.assign=c(0.5,0.2,0.15,0.1,0.05),#DEGの内訳(G1が50%,G2が20%,G3が15%,G4が10%,G5が5%)を指定
             DEG.foldchange=c(5,10,8,12,7),#DEGの発現変動度合い(G1が5倍,G2が10倍,G3が8倍,G4が12倍,G5が7倍)を指定
             replicates=c(3, 3, 3, 3, 3))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, "data_hypodata_3vs3vs3vs3vs3.txt", sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  42. TCCパッケージ中のBiological replicatesを模倣したシミュレーションデータ (G1群4サンプル vs. G2群4サンプル vs. G3群4サンプル)です。

    10,000 genes×12 samplesの「複製あり」タグカウントデータ(data_hypodata_4vs4vs4.txt) 「G1_rep1, G1_rep2, G1_rep3, G1_rep4, G2_rep1, G2_rep2, G2_rep3, G2_rep4, G3_rep1, G3_rep2, G3_rep3, G3_rep4」の計12サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の33.3%分(gene_1〜gene_1000)がG1群で5倍高発現、(2)次の33.3%分(gene_1001〜gene_2000)がG2群で5倍高発現、(3)残りの33.3%分(gene_2001〜gene_3000)がG3群で5倍高発現 以下のコピペでも取得可能です。

    out_f <- "data_hypodata_4vs4vs4.txt"   #出力ファイル名を指定してout_fに格納
    param_replicates <- c(4, 4, 4)         #G1, G2, G3群のサンプル数をそれぞれ指定
    param_Ngene <- 10000                   #全遺伝子数を指定
    param_PDEG <- 0.3                      #発現変動遺伝子の割合を指定    
    param_FC <- c(5, 5, 5)                 #G1, G2, G3群の発現変動の度合い(fold-change)をそれぞれ指定    
    param_DEGassign <- c(1/3, 1/3, 1/3)    #DEGのうちG1, G2, G3群で高発現なものの割合をそれぞれ指定   
    
    #必要なパッケージをロード
    library(TCC)                           #パッケージの読み込み
    
    #シミュレーションデータの作成
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene=param_Ngene,#シミュレーションデータの作成
                PDEG=param_PDEG,           #シミュレーションデータの作成
                DEG.assign=param_DEGassign,#シミュレーションデータの作成
                DEG.foldchange=param_FC,   #シミュレーションデータの作成
                replicates=param_replicates)#シミュレーションデータの作成
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  43. Blekhman et al., Genome Res., 2010のリアルカウントデータです。 Supplementary Table1で提供されているエクセルファイル(http://genome.cshlp.org/content/suppl/2009/12/16/gr.099226.109.DC1/suppTable1.xls; 約4.3MB) からカウントデータのみ抽出し、きれいに整形しなおしたものがここでの出力ファイルになります。 20,689 genes×36 samplesのカウントデータ(sample_blekhman_36.txt)です。 実験デザインの詳細はFigure S1中に描かれていますが、 ヒト(Homo Sapiens; HS), チンパンジー(Pan troglodytes; PT), アカゲザル(Rhesus macaque; RM)の3種類の生物種の肝臓サンプル(liver sample)の比較を行っています。 生物種ごとにオス3個体メス3個体の計6個体使われており(six individuals; six biological replicates)、 技術的なばらつき(technical variation)を見積もるべく各個体は2つに分割されてデータが取得されています(duplicates; two technical replicates)。 それゆえ、ヒト12サンプル、チンパンジー12サンプル、アカゲザル12サンプルの計36サンプル分のデータということになります。 以下で行っていることはカウントデータの列のみ「ヒトのメス(HSF1, HSF2, HSF3)」, 「ヒトのオス(HSM1, HSM2, HSM3)」,「チンパンジーのメス(PTF1, PTF2, PTF3)」, 「チンパンジーのオス(PTM1, PTM2, PTM3)」, 「アカゲザルのメス(RMF1, RMF2, RMF3)」, 「アカゲザルのオス(RMM1, RMM2, RMM3)」の順番で並び替えたものをファイルに保存しています。 もう少し美しくやることも原理的には可能ですが、そこは本質的な部分ではありませんので、ここではアドホック(その場しのぎ、の意味)な手順で行っています。 当然ながら、エクセルなどでファイルの中身を眺めて完全に列名を把握しているという前提です。 尚、"R1L4.HSF1"と"R4L2.HSF1"が「HSF1というヒトのメス一個体のtechnical replicates」であることは列名や文脈から読み解けます。

    #in_f <- "http://genome.cshlp.org/content/suppl/2009/12/16/gr.099226.109.DC1/suppTable1.xls"#入力ファイル名を指定してin_fに格納
    in_f <- "suppTable1.xls"               #入力ファイル名を指定してin_fに格納
    out_f <- "sample_blekhman_36.txt"      #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    hoge <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(hoge)                              #行数と列数を表示
    
    #サブセットの取得
    data <- cbind(                         #必要な列名の情報を取得したい列の順番で結合した結果をdataに格納
      hoge$R1L4.HSF1, hoge$R4L2.HSF1, hoge$R2L7.HSF2, hoge$R3L2.HSF2, hoge$R8L1.HSF3, hoge$R8L2.HSF3,
      hoge$R1L1.HSM1, hoge$R5L2.HSM1, hoge$R2L3.HSM2, hoge$R4L8.HSM2, hoge$R3L6.HSM3, hoge$R4L1.HSM3,
      hoge$R1L2.PTF1, hoge$R4L4.PTF1, hoge$R2L4.PTF2, hoge$R6L6.PTF2, hoge$R3L7.PTF3, hoge$R5L3.PTF3,
      hoge$R1L6.PTM1, hoge$R3L3.PTM1, hoge$R2L8.PTM2, hoge$R4L6.PTM2, hoge$R6L2.PTM3, hoge$R6L4.PTM3,
      hoge$R1L7.RMF1, hoge$R5L1.RMF1, hoge$R2L2.RMF2, hoge$R5L8.RMF2, hoge$R3L4.RMF3, hoge$R4L7.RMF3,
      hoge$R1L3.RMM1, hoge$R3L8.RMM1, hoge$R2L6.RMM2, hoge$R5L4.RMM2, hoge$R3L1.RMM3, hoge$R4L3.RMM3)
    colnames(data) <- c(                   #列名を付加
      "R1L4.HSF1", "R4L2.HSF1", "R2L7.HSF2", "R3L2.HSF2", "R8L1.HSF3", "R8L2.HSF3",
      "R1L1.HSM1", "R5L2.HSM1", "R2L3.HSM2", "R4L8.HSM2", "R3L6.HSM3", "R4L1.HSM3",
      "R1L2.PTF1", "R4L4.PTF1", "R2L4.PTF2", "R6L6.PTF2", "R3L7.PTF3", "R5L3.PTF3",
      "R1L6.PTM1", "R3L3.PTM1", "R2L8.PTM2", "R4L6.PTM2", "R6L2.PTM3", "R6L4.PTM3",
      "R1L7.RMF1", "R5L1.RMF1", "R2L2.RMF2", "R5L8.RMF2", "R3L4.RMF3", "R4L7.RMF3",
      "R1L3.RMM1", "R3L8.RMM1", "R2L6.RMM2", "R5L4.RMM2", "R3L1.RMM3", "R4L3.RMM3")
    rownames(data)<- rownames(hoge)        #行名を付加
    dim(data)                              #行数と列数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  44. Blekhman et al., Genome Res., 2010のリアルカウントデータです。

    1つ前の例題41とは違って、technical replicatesの2列分のデータは足して1列分のデータとしています。 20,689 genes×18 samplesのカウントデータ(sample_blekhman_18.txt)です。

    #in_f <- "http://genome.cshlp.org/content/suppl/2009/12/16/gr.099226.109.DC1/suppTable1.xls"#入力ファイル名を指定してin_fに格納
    in_f <- "suppTable1.xls"               #入力ファイル名を指定してin_fに格納
    out_f <- "sample_blekhman_18.txt"      #出力ファイル名を指定してout_fに格納
    
    #入力ファイルの読み込み
    hoge <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
    dim(hoge)                              #行数と列数を表示
    
    #サブセットの取得
    data <- cbind(                         #必要な列名の情報を取得したい列の順番で結合した結果をdataに格納
      hoge$R1L4.HSF1 + hoge$R4L2.HSF1, hoge$R2L7.HSF2 + hoge$R3L2.HSF2, hoge$R8L1.HSF3 + hoge$R8L2.HSF3,
      hoge$R1L1.HSM1 + hoge$R5L2.HSM1, hoge$R2L3.HSM2 + hoge$R4L8.HSM2, hoge$R3L6.HSM3 + hoge$R4L1.HSM3,
      hoge$R1L2.PTF1 + hoge$R4L4.PTF1, hoge$R2L4.PTF2 + hoge$R6L6.PTF2, hoge$R3L7.PTF3 + hoge$R5L3.PTF3,
      hoge$R1L6.PTM1 + hoge$R3L3.PTM1, hoge$R2L8.PTM2 + hoge$R4L6.PTM2, hoge$R6L2.PTM3 + hoge$R6L4.PTM3,
      hoge$R1L7.RMF1 + hoge$R5L1.RMF1, hoge$R2L2.RMF2 + hoge$R5L8.RMF2, hoge$R3L4.RMF3 + hoge$R4L7.RMF3,
      hoge$R1L3.RMM1 + hoge$R3L8.RMM1, hoge$R2L6.RMM2 + hoge$R5L4.RMM2, hoge$R3L1.RMM3 + hoge$R4L3.RMM3)
    colnames(data) <- c(                   #列名を付加
      "HSF1", "HSF2", "HSF3", "HSM1", "HSM2", "HSM3",
      "PTF1", "PTF2", "PTF3", "PTM1", "PTM2", "PTM3",
      "RMF1", "RMF2", "RMF3", "RMM1", "RMM2", "RMM3")
    rownames(data)<- rownames(hoge)        #行名を付加
    dim(data)                              #行数と列数を表示
    
    #ファイルに保存(テキストファイル)
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  45. TCCパッケージ中のシミュレーションデータ(G1群1サンプル vs. G2群1サンプル vs. G3群1サンプル)です。 10,000 genes×3 samplesの「複製なし」タグカウントデータ(data_hypodata_1vs1vs1.txt) 「G1_rep1, G2_rep1, G3_rep1」の計3サンプル分からなります。 全10,000遺伝子中の最初の3,000個(gene_1〜gene_3000まで)が発現変動遺伝子(DEG)です。 全3,000 DEGsの内訳:(1)最初の70%分(gene_1〜gene_2100)がG1群で3倍高発現、(2)次の20%分(gene_2101〜gene_2700)がG2群で10倍高発現、 (3)残りの10%分(gene_2701〜gene_3000)がG3群で6倍高発現。 以下のコピペでも取得可能です。

    out_f <- "data_hypodata_1vs1vs1.txt"   #出力ファイル名を指定してout_fに格納
    library(TCC)                           #パッケージの読み込み
    set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
    tcc <- simulateReadCounts(Ngene = 10000, PDEG = 0.3,#全遺伝子数とDEGの割合を指定
                 DEG.assign = c(0.7, 0.2, 0.1),#DEGの内訳(G1が70%, G2が20%, G3が10%)を指定
                 DEG.foldchange = c(3, 10, 6),#DEGの発現変動度合い(G1が3倍、G2が10倍、G3が6倍)を指定
                 replicates = c(1, 1, 1))  #各群のサンプル数を指定
    plotFCPseudocolor(tcc)                 #シミュレーション条件のpseudo-colorイメージを描画
    
    #ファイルに保存
    tmp <- cbind(rownames(tcc$count), tcc$count)#保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  46. recount2Collado-Torres et al., Nat Biotechnol., 2017

    ReCount(Frazee et al., BMC Bioinformatics, 2011)の後継版です。 Bioconductor上でもrecountというRパッケージが提供されています。

  47. pasillaパッケージ中の複製あり2群間比較用カウントデータです(孫建強氏 提供情報)。

    14,599 genes×7 samplesの「複製あり」タグカウントデータ(sample_pasilla_4vs3.txt)です。 処理前4サンプル(4 untreated) vs. 処理後3サンプル(3 treated)の2群間比較用です。 データの原著論文はBrooks et al., Genome Res., 2011です。 手順としては、pasillaパッケージ中のタブ区切りテキストファイルpasilla_gene_counts.tsvを呼び出し、 それをsample_pasilla_4vs3.txtというファイル名で保存しているだけです。 以下のコピペでも取得可能です。

    out_f <- "sample_pasilla_4vs3.txt"     #出力ファイル名を指定してout_fに格納
    library(pasilla)                       #パッケージの読み込み
    
    #本番
    hoge <- system.file("extdata",         #pasillaパッケージ中の目的ファイルのフルパス情報を取得
               "pasilla_gene_counts.tsv",  #pasillaパッケージ中の目的ファイルのフルパス情報を取得
               package="pasilla", mustWork=TRUE)#pasillaパッケージ中の目的ファイルのフルパス情報を取得
    data <- read.csv(hoge, sep="\t", row.names="gene_id")#gene_id列の情報を行名部分としてread.csv関数で読み込む
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  48. pasillaパッケージ中の複製なし2群間比較用カウントデータです(孫建強氏 提供情報)。

    14,599 genes×2 samplesの「複製なし」タグカウントデータ(sample_pasilla_1vs1.txt)です。 1つ上の例題の4 untreated vs. 3 treatedのオリジナルデータから、1列目と5列目の情報を抽出して、sample_pasilla_1vs1.txtというファイル名で保存しているだけです。 以下のコピペでも取得可能です。

    out_f <- "sample_pasilla_1vs1.txt"     #出力ファイル名を指定してout_fに格納
    param_subset <- c(1, 5)                #取り扱いたいサブセット情報を指定
    library(pasilla)                       #パッケージの読み込み
    
    #本番
    hoge <- system.file("extdata",         #pasillaパッケージ中の目的ファイルのフルパス情報を取得
               "pasilla_gene_counts.tsv",  #pasillaパッケージ中の目的ファイルのフルパス情報を取得
               package="pasilla", mustWork=TRUE)#pasillaパッケージ中の目的ファイルのフルパス情報を取得
    data <- read.csv(hoge, sep="\t", row.names="gene_id")#gene_id列の情報を行名部分としてread.csv関数で読み込む
    data <- data[,param_subset]            #param_subsetで指定した列の情報のみ抽出
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  49. FASTA形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa) に対してbasic alignerでマッピングする際の動作確認用RNA-seqデータ(sample_RNAseq4.fa)。 リファレンス配列を読み込んで、list_sub9.txtで与えた部分配列を抽出したものです。 GFF3形式ののアノテーションファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3) を用いてマッピング結果からカウント情報を取得する際に、どの領域にマップされたリードがOKなのかを検証するためのリードファイルです。

    in_f1 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
    in_f2 <- "list_sub9.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
    out_f <- "sample_RNAseq4.fa"           #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(Biostrings)                    #パッケージの読み込み
    
    #入力ファイルの読み込み
    fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
    posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
    fasta                                  #確認してるだけです
    
    #前処理(description部分をスペースで区切り、分割された中から1番目の要素で置き換える)
    hoge <- strsplit(names(fasta), " ", fixed=TRUE)#names(fasta)中の文字列を" "で区切った結果をリスト形式でhogeに格納
    hoge2 <- unlist(lapply(hoge, "[[", 1)) #hogeのリスト中の1番目の要素を抽出してhoge2に格納
    names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
    fasta                                  #確認してるだけです
    
    #本番
    hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
    for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
        obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
        hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeに格納
    }
    fasta <- hoge                          #hogeの中身をfastaに格納
    fasta                                  #確認してるだけです
    
    #後処理(description部分の作成)
    description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
    names(fasta) <- description            #description行に相当する記述を追加している
    fasta                                  #確認してるだけです
    
    #ファイルに保存
    writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
    	
  50. MASSパッケージから提供されている gehanという名前の生存時間解析用データ(sample48.txt;タブ区切りテキストファイル)です。 カプランマイヤー(Kaplan-Meier)法による生存曲線(カプランマイヤー曲線;生存率曲線)作成時の入力ファイルです。 Rと生存時間分析(1)や、 MASSのリファレンスマニュアル56ページ目のgehanの説明部分でも解説されていますが、 これは(ヘッダー行を除く)42行×4列からなる数値行列データです。42行の行数は、42人の白血病患者(leukemia patients)数に相当します。 2人ずつのペアになっており、片方には6-mercaptopurine (6-MP)という薬を投与、もう片方にはプラセボ(control)を投与しています。
      行列データの各列には以下に示す情報が格納されています:
    1列目(列名:pair)は、患者のid情報が示されています。 例えば1-2行目が1番目のペア、3-4行目が2番目のペアだと読み解きます。
      2列目(列名:time)は、寛解時間(単位は週)です。MASSのリファレンスマニュアル56ページ目では、 remission time in weeksと書いてあります。大まかには「元気に過ごせた時間」とか「生存時間」のように解釈しちゃって構いません。
      3列目(列名:cens)は、打ち切り(censoring)があったかなかったかという 0 or 1の情報からなります。打ち切りがあったら0、なかったら1です。 このデータの場合は、3列目の0が12個、1が30個です。したがって、12人の患者さんのデータが打ち切りのあるデータ(「上完全データ」と呼ぶそうです)、 30人の患者さんのデータが打ち切りのないデータ(「完全データ」と呼ぶそうです。)ということになります。打ち切りデータというのは、 患者さんとの連絡が取れなくなったなど、何らかの理由で患者さんの状況を把握する手段がなくなったデータのことを指します。 観察期間終了まで生存されている患者さんの場合も、「打ち切りありで0」ということになります。 ちなみに、亡くなったという情報が分かっているデータは打ち切りのないデータに相当します。
      4列目(列名:treat)には、プラセボ(control)投与群か6-MP投与群かという「どのような処理を行ったかという処理(treatment)情報」が記載されています。

    out_f <- "sample48.txt"                #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(MASS)                          #パッケージの読み込み
    
    #本番(目的のデータセットをロード)
    data(gehan)                            #gehanデータのロード
    tmp <- gehan                           #名前をtmpに変更
    head(tmp)                              #確認してるだけです
    dim(tmp)                               #確認してるだけです
    
    #ファイルに保存
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  51. survivalパッケージから提供されている kidneyという名前の生存時間解析用データ(sample49.txt;タブ区切りテキストファイル)です。 カプランマイヤー(Kaplan-Meier)法による生存曲線(カプランマイヤー曲線;生存率曲線)作成時の入力ファイルです。 survivalのリファレンスマニュアル48ページ目のkidneyの説明部分でも解説されています。 これは(ヘッダー行を除く)76行×7列からなる数値行列データです。 これは、ポータブル透析装置(portable dialysis equipment)を使用している腎臓病患者(kidney patients)向けの、 カテーテル(catheter)挿入時点での感染までの再発時間に関するデータです(McGilchrist and Aisbett, Biometrics, 1991)。 カテーテルは感染以外の理由で除去される場合があります。その場合、観察は打ち切られます。 患者1人につき、2つの観察結果(2 observations)があります。 このデータは76行ありますので、76/2 = 38人分の腎臓病患者のデータがあることになります。 このデータは、生存モデルでのランダム効果(フレイル)を説明するためによく使用されているようです。
      行列データの各列には以下に示す情報が格納されています:
      1列目(列名:id)は、患者のid情報が示されています。 例えば、(ヘッダー行を除く)最初の1-2行がid = 1の最初の患者さん、次の3-4行がid = 2の患者さん、という風に解釈します。
      2列目(列名:time)は、時間です(単位不明)。
      3列目(列名:status)は、event statusです。 0 or 1ですが、何が0で何が1かは記載されていません。 Rと生存時間分析(2) によると、「打ち切りは0、その他は1」となっています。
      4列目(列名:age)は、年令情報(in years)です。
      5列目(列名:sex)は、性別情報です。1が男性、2が女性です。
      6列目(列名:disease)は、「disease type」に関する情報が含まれています。 「0=GN, 1=AN, 2=PKD, 3=Other」だそうです。PKDはほぼ間違いなくpolycystic kidney diseaseの略で、多発性囊胞腎です。 ANは、おそらくacute nephritis (急性腎炎)のこと。GNは、glomerular nephritis (糸球体腎炎)の略なんだろうとは思いますが...。 実際には、数値ではなく「GN or AN or PKD or Other」のいずれかが記載されています。
      7列目(列名:frail)は、「frailty estimate from original paper」に関する情報が含まれています。 原著論文(McGilchrist and Aisbett, Biometrics, 1991)から推定した フレイル(frailty;加齢により心身が老い衰えた状態)の度合いを数値で示したもののようです。数値が大きいほど衰えの度合いが高い?!。

    out_f <- "sample49.txt"                #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(survival)                      #パッケージの読み込み
    
    #本番(目的のデータセットをロード)
    data(kidney)                           #kidneyデータのロード
    tmp <- kidney                          #名前をtmpに変更
    head(tmp)                              #確認してるだけです
    dim(tmp)                               #確認してるだけです
    
    #ファイルに保存
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  52. survivalパッケージから提供されている colonという名前の生存時間解析用データ(sample50.txt;タブ区切りテキストファイル)です。 カプランマイヤー(Kaplan-Meier)法による生存曲線(カプランマイヤー曲線;生存率曲線)作成時の入力ファイルです。 survivalのリファレンスマニュアル23ページ目のcolonの説明部分でも解説されていますが、 これは(ヘッダー行を除く)1858行×16列からなる数値行列データです。 これは、大腸がんに対する術後補助化学療法(adjuvant chemotherapy)の有効性を示したデータです (Laurie et al., J Clin Oncol., 1989)。 化学療法としては、低毒性のレバミゾール(Levamisole; 線虫駆虫薬の1種)と、 中程度の毒性のフルオロウラシル(fluorouracil; 5-FU)が使われています。 患者は、何もせずに経過観察(Obsavation)のみのObs群、Levamisole単独投与群(Lev群)、そして2種類の抗がん剤の併用群(Lev+5-FU群)の3種類に分けられます。 患者1人につき、2つの記録(two records)があります。再発(recurrence)が1で、死亡(death)が2です。 このデータは1858行ありますので、1858/2 = 929人分の大腸がん患者(colon cancer patients)のデータがあることになります。 それぞれのイベントの種類(event type; etype)ごとに、時間(time)の情報があります。 例えば、idが1の患者さんは、再発(etype = 1)までの時間が968 days、死亡(etype = 2)までの時間が1521 daysだったと解釈します。 データ全体を眺める(特にtime列とetype列を見比べる)とわかりますが、死亡までの時間のほうが再発までの時間よりも短いデータはアリエマセン。 「再発までの時間 <= 死亡までの時間」ということになります。
      行列データの各列には以下に示す情報が格納されています:
      1列目(列名:id)は、患者のid情報が示されています。 例えば、(ヘッダー行を除く)最初の1-2行がid = 1の最初の患者さん、次の3-4行がid = 2の患者さん、という風に解釈します。
      2列目(列名:study)は、全て1であり特に意味はありません。
      3列目(列名:rx)は、患者に対してどのような処置(Treatment)を行ったのかという情報が含まれています。 経過観察のみのObs群、Levamisole単独投与群(Lev群)、そして2種類の抗がん剤の併用群(Lev+5-FU群)の3種類です。
      4列目(列名:sex)は、性別情報です。0が女性、1が男性です。
      5列目(列名:age)は、年令情報(in years)です。
      6列目(列名:obstruct)は、「obstruction of colon by tumour」に関する情報が含まれています。 おそらく癌によって腸閉塞が行ったかどうかという0 or 1の情報からなるのだろうと思います。この列をざっと眺めると、0のほうが多いこと、 そしてそれほど腸閉塞の頻度は多くないだろうという素人判断から、0が腸閉塞なし、1が腸閉塞ありなのだろうと思います。
      7列目(列名:perfor)は、「perforation of colon」に関する情報が含まれています。 おそらく結腸(大腸のこと)に穴(穿孔)があいちゃったかどうかという0 or 1の情報からなるのだろうと思います。この列をざっと眺めると、0のほうが多いこと、 そしてそれほど穿孔の頻度は多くないだろうという素人判断から、0が穿孔なし、1が穿孔ありなのだろうと思います。
      8列目(列名:adhere)は、「adherence to nearby organs」に関する情報が含まれています。 近くの臓器への癒着があったかどうかという0 or 1の情報からなるのだろうと思います。この列をざっと眺めると、0のほうが多いこと、 そしてそれほど癒着の頻度は多くないだろうという素人判断から、0が癒着なし、1が癒着ありなのだろうと思います。
      9列目(列名:nodes)は、「number of lymph nodes with detectable cancer」に関する情報が含まれています。 リンパ節への転移に関する情報で、転移のあったリンパ節数(多いほどよくない)です。
      10列目(列名:status)は、「censoring status」に関する情報が含まれています。 打ち切り(censoring)があったかなかったかという 0 or 1の情報からなります。打ち切りがあったら0、なかったら1です。 打ち切りデータというのは、患者さんとの連絡が取れなくなったなど、何らかの理由で患者さんの状況を把握する手段がなくなったデータのことを指します。 観察期間終了まで生存されている患者さんの場合は、「打ち切りありで0」ということになります。 ちなみに、亡くなったという情報が分かっているデータは打ち切りのないデータに相当します。
      11列目(列名:differ)は、「differentiation of tumour」に関する情報が含まれています。 分化度(differentiation)のことですね。「1=well, 2=moderate, 3=poor」です。高分化型が1、中分化型が2、低分化型が3です。 数値が大きいほど悪性度が高いと解釈します。
      12列目(列名:extent)は、「Extent of local spread」に関する情報が含まれています。 「腫瘍の局所的拡大の範囲」と解釈すればよいのでしょうか。「1=submucosa, 2=muscle, 3=serosa, 4=contiguous structures)」です。 大腸粘膜(mucosa)の次の層がsubmucosa、その次が筋層(muscle layer)、その次がserosa (serous membrane;漿膜)、 最後にcontiguous structures (直接隣接する組織)となります。数値が大きいほど深層まで達していると解釈できるので、悪性度が高いと解釈します。
      13列目(列名:surg)は、「time from surgery to registration」に関する情報が含まれています。 来訪してから手術までの期間であり、「0=short, 1=long」です。
      14列目(列名:node4)は、「more than 4 positive lymph nodes」に関する情報が含まれています。 nodes列が4よりも大きいものが1、4以下が0となっているようですね。
      15列目(列名:time)は、「days until event or censoring」に関する情報が含まれています。 イベント(再発 or 死亡)または打ち切り(censoring)までの日数です。数値の大きさは、生存時間の長さを表します。
      16列目(列名:etype)は、「event type」に関する情報が含まれています。 再発(recurrence)が1で、死亡(death)が2です。

    out_f <- "sample50.txt"                #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(survival)                      #パッケージの読み込み
    
    #本番(目的のデータセットをロード)
    data(colon)                            #colonデータのロード
    tmp <- colon                           #名前をtmpに変更
    head(tmp)                              #確認してるだけです
    dim(tmp)                               #確認してるだけです
    
    #ファイルに保存
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	
  53. MLSeqパッケージ(Goksuluk et al., 2019)から提供されている cervicalという名前の2群間比較用データ(sample51.txt;タブ区切りテキストファイル)です。 714行×58列からなる数値行列データ(ヘッダー行を除く)です。データの原著論文は、Witten et al., 2010です。 子宮頸がん患者29例の正常組織と癌組織のペアサンプルであり、714のmicroRNA (714 miRNAs)の発現を調べたデータです。 (行名情報の列を除く)最初の29列分が正常サンプル(N1, N2, ..., N29)、残りの29列分が癌サンプル(T1, T2, ..., T29)のデータです。 MLSeqパッケージマニュアル 中にも書かれていますが、以下のようなコマンドでも取得可能です。 MLSeqパッケージのインストールが完了していれば、以下のfilepath情報を頼りにしてcervical.txtというファイルを見つければよいだけですが、 filapath情報からたどり着けるのはある程度経験を積んでからというのが現実だと思いますので、わざわざ記載しているのです。

    out_f <- "sample51.txt"                #出力ファイル名を指定してout_fに格納
    
    #必要なパッケージをロード
    library(MLSeq)                         #パッケージの読み込み
    
    #前処理(ファイルパス情報を取得)
    filepath <- system.file("extdata/cervical.txt", package="MLSeq")#ファイルパス情報を取得
    filepath                               #確認してるだけです
    
    #本番(数値行列情報を取得)
    data <- read.table(filepath, row.names=1, header=TRUE)#filepathで指定したファイルの読み込み
    dim(data)                              #確認してるだけです
    
    #ファイルに保存
    tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
    write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
    	

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | NGSハンズオン講習会2017

ここの情報は、サブページの「NGSハンズオン講習会2017」に移動しました。

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | NGSハンズオン講習会2016

ここの情報は、サブページの「NGSハンズオン講習会2016」に移動しました。

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | NGSハンズオン講習会2015

ここの情報は、サブページの「NGSハンズオン講習会2015」に移動しました。

バイオインフォマティクス人材育成カリキュラム(次世代シークエンサ) | NGS速習コース2014

ここの情報は、サブページの「NGS速習コース2014」に移動しました。

書籍 | 日本乳酸菌学会誌 | について

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | について」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第1回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第1回イントロダクション」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第2回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第2回GUI環境からコマンドライン環境へ」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第3回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第3回Linux環境構築からNGSデータ取得まで」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第4回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第4回クオリティコントロールとプログラムのインストール」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第5回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第5回アセンブル、マッピング、そしてQC」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第6回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第6回ゲノムアセンブリ」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第7回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第7回ロングリードアセンブリ」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第8回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第8回アセンブリ後の解析」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第9回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第9回ゲノムアノテーションとその可視化、DDBJへの登録」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第10回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第10回DDBJへの塩基配列の登録(後編)」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第11回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第11回統合データ解析環境Galaxy」に移動しました。

書籍 | 日本乳酸菌学会誌 | 第12回イントロダクション

ここの情報は、サブページの「書籍 | 日本乳酸菌学会誌 | 第12回Galaxy:ヒストリーとワークフロー」に移動しました。

イントロ | 一般 | ランダムに行を抽出

例えばタブ区切りテキストファイルのannotation.txtが手元にあり、指定した数の行を(非復元抽出で)ランダムに抽出するやり方を示します。

Linux (UNIX)のgrepコマンドのようなものです。perlのハッシュのようなものです。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. タブ区切りテキストファイル(annotation.txt)からランダムに5行分を抽出したい場合:

ヘッダー行はヘッダー行として残す場合のやり方です。

in_f <- "annotation.txt"               #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param <- 5                             #ランダム抽出したい行数を指定

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, sep="\t", quote="")#in_fで指定したファイルの読み込み
dim(data)                              #オブジェクトdataの行数と列数を表示

#本番
hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納

out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
dim(out)                               #オブジェクトoutの行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

2. タブ区切りテキストファイル(annotation.txt)からランダムに5行分を抽出したい場合:

ヘッダー行がない場合のやり方です。

in_f <- "annotation.txt"               #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param <- 5                             #ランダム抽出したい行数を指定

#入力ファイルの読み込み
data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み
dim(data)                              #オブジェクトdataの行数と列数を表示

#本番
hoge <- sample(1:nrow(data), param, replace=F)#入力ファイルの行数からparamで指定した数だけ非復元抽出した結果をhogeに格納
out <- data[sort(hoge),]               #hogeで指定した行のみ抽出した結果をoutに格納
dim(out)                               #オブジェクトoutの行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
	

イントロ | 一般 | 任意の文字列を行の最初に挿入

タブ区切りのヒト遺伝子アノテーションファイル(human_annotation_sub.gtf)が手元にあり、 これを入力としてQuasRパッケージを用いてマッピング結果ファイルをもとにカウントデータを得ようと思ってもエラーに遭遇することが多いです。 この原因の一つとして、GFF/GTF形式のアノテーションファイル中の文字列がゲノム情報中の文字列と異なっていることが挙げられます。 例えば、ゲノム配列中の染色体名は"chr1", "chr2", ...などという記述がほとんどですが、これに対応するGFF/GTFの一列目の文字列が"1", "2", ...となっています。

そこでここでは、文字列を一致させるべく、タブ区切りのヒト遺伝子アノテーションファイルの左端に"chr"を挿入するやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. GTFファイル(human_annotation_sub.gtf)の各行の左端に"chr"を挿入したい場合:

ヘッダー行がない場合のやり方です。

in_f <- "human_annotation_sub.gtf"     #入力ファイル名(目的のタブ区切りテキストファイル)を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param <- "chr"                         #挿入したい文字列を指定

#入力ファイルの読み込み
data <- read.table(in_f, header=FALSE, sep="\t", quote="")#in_fで指定したファイルの読み込み

#本番(文字列挿入)
data[,1] <- paste(param, data[,1], sep="")#dataオブジェクトの1列目の左側にparamで指定した文字列を挿入

#ファイルに保存
write.table(data, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#dataの中身を指定したファイル名で保存
	

イントロ | 一般 | 任意のキーワードを含む行を抽出(基礎)

例えばタブ区切りテキストファイルが手元にあり、この中からリストファイル中の文字列を含む行を抽出するやり方を示します。 Linux (UNIX)のgrepコマンドのようなものであり、perlのハッシュのようなものです。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist1.txt)中のものが含まれる行全体を出力したい場合:

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param <- 1                             #アノテーションファイル中の検索したい列番号を指定

#入力ファイルの読み込み
data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
dim(data)                              #オブジェクトdataの行数と列数を表示

#本番
obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
dim(out)                               #オブジェクトoutの行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

2. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist2.txt)中のものが含まれる行全体を出力したい場合:

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param <- 1                             #アノテーションファイル中の検索したい列番号を指定

#入力ファイルの読み込み
data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番
obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

3. 目的のタブ区切りテキストファイル(annotation.txt)中の第3列目をキーとして、リストファイル(genelist2.txt)中のものが含まれる行全体を出力したい場合:

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param <- 3                             #アノテーションファイル中の検索したい列番号を指定

#入力ファイルの読み込み
data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番
obj <- is.element(as.character(data[,param]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

4. 目的のタブ区切りテキストファイル(annotation.txt)に対して、リストファイル(genelist1.txt)中のものが含まれる行全体を出力したい場合:

annotation.txt中にはgene1以外にgene10やgene11もあるため、リストファイル中の文字列(gene1, gene7, gene9)から想定される3行分以外に、 gene10とgene11の行も出力されます。(2016年4月20日追加)

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番(リストファイル中の要素数分だけループを回して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
hoge <- NULL                           #最終的に欲しい行番号情報を格納するためのプレースホルダ
for(i in 1:length(keywords)){          #length(keywords)で表現される要素数分だけループを回す
    hoge <- c(hoge, c(grep(keywords[i], data)))#リストファイル中の要素ごとに検索をかけて要素中の文字列と一致する行番号情報をhogeにどんどん格納している
    if(i%%10 == 0) cat(i, "/", length(keywords), "finished\n")#進行状況を表示させてるだけ
}
hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存

#以下は(こんなこともできますという)おまけ
#リストファイル中にあるキーワードごとに、それが見つかった行番号情報を出力
out_f2 <- "hoge4_hoge.txt"             #出力ファイル名を指定してout_fに格納
hoge2 <- NULL                          #欲しい行番号情報をリスト形式で格納するためのプレースホルダ
for(i in 1:length(keywords)){          #length(keywords)で表現される要素数分だけループを回す
    hoge2 <- c(hoge2, list(grep(keywords[i], data)))#リストファイル中の要素ごとに検索をかけて要素中の文字列と一致する行番号情報を(キーワードごとに取り扱うため)リスト形式でhoge2にどんどん格納している
}
hoge3 <- sapply(hoge2, paste, collapse="\t")#hoge2はリスト形式になっているので、リストの各成分中の要素を"\t"で結合し、成分数が要素数になるようなベクトルhoge3を作成している(出力に用いるwriteLines関数がベクトル中の一要素を一行で出力する仕様になっている。それに合わせるための小細工です)
hoge4 <- paste(keywords, hoge3, sep="\t")#一番左側が検索に用いたリストファイル中のキーワードになるようなベクトルhoge4を作成
writeLines(hoge4, out_f2)              #hoge4の中身を指定したファイル名で保存
	

5. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、リストファイル(genelist1.txt)中のものに対応するannotation.txt中の第4列目(subcellular_location列)のみを出力する場合:

リストファイルgenelist1.txt中の文字列(gene1, gene7, gene9)が、annotation.txt中の1列目にある行の4列目の情報は、全てnuclearです。(2016年4月20日追加)

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
param2 <- 4                            #出力したい列番号を指定

#入力ファイルの読み込み
data <- read.table(in_f1, header=TRUE, sep="\t", quote="")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番
obj <- is.element(as.character(data[,param1]), keywords)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj, param2]               #objがTRUEとなる行の(param2)列目の情報のみ抽出した結果をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
	

6. 例題4と同じことをsapply関数を用いてやる場合:

unique(hoge)のところをunique(unlist(hoge))に変更しました。出力結果は例題4と同じです。(2016年4月20日追加)

in_f1 <- "annotation.txt"              #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "genelist1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
hoge <- sapply(keywords, grep, x=data) #リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
hoge <- unique(unlist(hoge))           #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

7. 例題6と同じことを別のファイルを用いてやる場合:

ラットのアノテーション情報ファイル(GPL1355-14795.txt)と、2群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)です。 unique(hoge)のところをunique(unlist(hoge))に変更しました。約15分。(2016年4月20日追加)

in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
hoge <- sapply(keywords, grep, x=data) #リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
hoge <- unique(unlist(hoge))           #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

8. 例題7と基本的には同じだが、「遺伝子IDリストファイル中の文字列」が「アノテーション情報ファイル中の一番左側」にしか存在しないという前提で高速に探索したい場合:

ラットのアノテーション情報ファイル(GPL1355-14795.txt)と、2群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)です。 unique(hoge)のところをunique(unlist(hoge))に変更しました。約7分。(2016年4月20日追加)

in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
hoge <- sapply(paste("^", keywords, sep=""), grep, x=data)#リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
hoge <- unique(unlist(hoge))           #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

9. 8を基本として、8の出力ファイルは対象の行の情報全てを出力するものであったが、13列目のRefSeq Transcript IDに相当するもののみ抽出したい場合:

ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納
param <- 13                            #出力したい列番号を指定

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み

#本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている
hoge <- sapply(paste("^", keywords, sep=""), grep, x=data)#リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
hoge <- unique(hoge)                   #得られるhogeベクトルは重複している可能性があるので重複を除いている
hoge2 <- data[hoge]                    #ベクトルdataからobjがTRUEとなる要素のみを抽出した結果をhoge2に格納(dataオブジェクトは行列ではないことに注意!)
hoge3 <- strsplit(hoge2, "\t")         #hoge2ベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge3に格納
out <- unlist(lapply(hoge3, "[[", param))#hoge3のリスト中の(param)番目の要素のみ抽出した結果outに格納

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

10. 9を基本として、8の出力ファイルは対象の行の情報全てを出力するものであったが、13列目のRefSeq Transcript IDに相当するもののみ抽出したい場合:

ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

アノテーション情報ファイルの形式は"#"から始まる行以外は同じ列数なので、行列形式などにすることが可能なことを利用している(9に比べて一般性は劣るがより劇的に早い計算が可能)

in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge10.txt"                  #出力ファイル名を指定してout_fに格納
param <- 13                            #出力したい列番号を指定

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
keywords <- unique(keywords)           #リストファイル中の要素が重複している可能性があるので、重複なしの状態にしている

#アノテーション情報ファイル中で"#"から始まる行を除いて(param)列目の情報を抽出している
hoge <- grep("^#", data)               #正規表現で"#"から始まる行の位置情報を抽出してhogeに格納
data <- data[-hoge]                    #ベクトルdataからhoge中の数値に対応する要素の除いた結果をdataに格納
hoge1 <- strsplit(data, "\t")          #dataベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge1に格納
hoge2 <- unlist(lapply(hoge1, "[[", param))#hoge1のリスト中の(param)番目の要素のみ抽出してhoge2に格納
names(hoge2) <- unlist(lapply(hoge1, "[[", 1))#hoge1のリスト中の1番目の要素が遺伝子IDと対応するので、これをhoge2のnames属性として割り当てる

#本番(keywords中の要素に対応するRefSeq IDを取得)
hoge3 <- hoge2[keywords]               #hoge2ベクトルの中から、names(hoge2)がkeywordsと一致するものを抽出してhoge3に格納
out <- unique(hoge3)                   #重複を除去している

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

11. 10を基本として、遺伝子IDリストに対応するRefSeq Transcript IDを抽出ところまでは同じだが、RefSeq IDが同じで遺伝子IDリストにないもの(common)も存在するのでその分を考慮:

ラットのアノテーション情報ファイル(GPL1355-14795.txt), 二群間比較で発現変動が確認された遺伝子IDリストファイル(result_rankprod_BAT_id.txt)

アノテーション情報ファイルの形式は"#"から始まる行以外は同じ列数なので、行列形式などにすることが可能なことを利用している(9に比べて一般性は劣るがより劇的に早い計算が可能)

in_f1 <- "GPL1355-14795.txt"           #入力ファイル名を指定してin_f1に格納(アノテーションファイル)
in_f2 <- "result_rankprod_BAT_id.txt"  #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f1 <- "result_rankprod_BAT_RefSeq_DEG.txt"#出力ファイル名1を指定
out_f2 <- "result_rankprod_BAT_RefSeq_nonDEG.txt"#出力ファイル名2を指定
param <- 13                            #出力したい列番号を指定

#入力ファイルの読み込み
data <- readLines(in_f1)               #in_f1で指定したファイルの読み込み
geneid_DEG <- readLines(in_f2)         #in_f2で指定したファイルの読み込み

#アノテーション情報ファイル中で"#"から始まる行を除いて(param)列目の情報を抽出している
hoge <- grep("^#", data)               #正規表現で"#"から始まる行の位置情報を抽出してhogeに格納
data <- data[-hoge]                    #ベクトルdataからhoge中の数値に対応する要素の除いた結果をdataに格納
hoge1 <- strsplit(data, "\t")          #dataベクトル中の各要素を「タブ(\t)」で区切って分割した結果をhoge1に格納
hoge2 <- unlist(lapply(hoge1, "[[", param))#hoge1のリスト中の(param)番目の要素のみ抽出してhoge2に格納
names(hoge2) <- unlist(lapply(hoge1, "[[", 1))#hoge1のリスト中の1番目の要素が遺伝子IDと対応するので、これをhoge2のnames属性として割り当てる

#本番
tmp_DEG <- unique(hoge2[geneid_DEG])   #hoge2ベクトルの中から、names(hoge2)がgeneid_DEGと一致するものを抽出し、重複を除いてtmp_DEGに格納
geneid_nonDEG <- setdiff(names(hoge2), geneid_DEG)#読み込んだ遺伝子IDリストファイル中のID以外のものをgeneid_nonDEGに格納
tmp_nonDEG <- unique(hoge2[geneid_nonDEG])#hoge2ベクトルの中から、names(hoge2)がgeneid_nonDEGと一致するものを抽出し、重複を除いてtmp_nonDEGに格納

common <- intersect(tmp_DEG, tmp_nonDEG)#tmp_DEGとtmp_nonDEGベクトル間の積集合をcommonに格納
out_DEG <- setdiff(tmp_DEG, common)    #tmp_DEGとcommon間の差集合をout_DEGに格納
out_nonDEG <- setdiff(tmp_nonDEG, common)#tmp_nonDEGとcommon間の差集合をout_nonDEGに格納

#ファイルに保存
writeLines(out_DEG, out_f1)            #out_DEGの中身を指定したファイル名で保存
writeLines(out_nonDEG, out_f2)         #out_nonDEGの中身を指定したファイル名で保存
	

12. 目的のタブ区切りテキストファイル(annotation.txt)中の第1列目をキーとして、param2で指定した文字列が含まれる行全体を出力したい場合:

in_f <- "annotation.txt"               #入力ファイル名を指定してin_fに格納(アノテーションファイル)
out_f <- "hoge12.txt"                  #出力ファイル名を指定してout_fに格納
param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
param2 <- c("gene1", "gene7", "gene9") #検索したい文字列を指定

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, sep="\t", quote="")#in_fで指定したファイルの読み込み
dim(data)                              #オブジェクトdataの行数と列数を表示

#本番
obj <- is.element(as.character(data[,param1]), param2)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
dim(out)                               #オブジェクトoutの行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

13. 目的のタブ区切りテキストファイル(annotation2.txt)中の第1列目をキーとして、param2で指定した文字列が含まれる行全体を出力したい場合:

入力ファイル中にヘッダー行がない場合の読み込み例です。

in_f <- "annotation2.txt"              #入力ファイル名を指定してin_fに格納(アノテーションファイル)
out_f <- "hoge13.txt"                  #出力ファイル名を指定してout_fに格納
param1 <- 1                            #アノテーションファイル中の検索したい列番号を指定
param2 <- c("gene1", "gene7", "gene9") #検索したい文字列を指定

#入力ファイルの読み込み
data <- read.table(in_f, header=F, sep="\t", quote="")#in_fで指定したファイルの読み込み
dim(data)                              #オブジェクトdataの行数と列数を表示

#本番
obj <- is.element(as.character(data[,param1]), param2)#条件を満たすかどうかを判定した結果をobjに格納
out <- data[obj,]                      #objがTRUEとなる行のみ抽出した結果をoutに格納
dim(out)                               #オブジェクトoutの行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#outの中身を指定したファイル名で保存
	

14. GFF3形式のタブ区切りテキストファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3)に対して、"ID=gene"という文字列が含まれる行全体を出力したい場合:

乳酸菌ゲノム(Lactobacillus casei 12A)のアノテーションファイルです。 4.をベースに作成。unique(hoge)のところをunique(unlist(hoge))に変更しました。(2016年4月20日追加)

in_f <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_fに格納
out_f <- "hoge14.txt"                  #出力ファイル名を指定してout_fに格納
param <- "ID=gene"                     #検索したい文字列を指定

#入力ファイルの読み込み
data <- readLines(in_f)                #in_fで指定したファイルの読み込み
length(data)                           #オブジェクトdataの要素数を表示

#本番(paramで指定した文字列と一致する行番号情報を得て、その行のみ出力)
hoge <- sapply(param, grep, x=data)    #paramで指定した文字列と一致する行番号情報を得ている
hoge <- unique(unlist(hoge))           #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
length(out)                            #オブジェクトoutの要素数を表示

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

15. GFF3形式ファイル(annotation.gff)に対して、"CDS"という文字列が含まれる行全体を出力したい場合:

2019年5月13日の講義で利用したファイルです。

in_f <- "annotation.gff"               #入力ファイル名を指定してin_fに格納
out_f <- "hoge15.txt"                  #出力ファイル名を指定してout_fに格納
param <- "CDS"                         #検索したい文字列を指定

#入力ファイルの読み込み
data <- readLines(in_f)                #in_fで指定したファイルの読み込み
length(data)                           #オブジェクトdataの要素数を表示

#本番(paramで指定した文字列と一致する行番号情報を得て、その行のみ出力)
hoge <- sapply(param, grep, x=data)    #paramで指定した文字列と一致する行番号情報を得ている
hoge <- unique(unlist(hoge))           #得られるhogeベクトルは重複している可能性があるので重複を除いている
out <- data[hoge]                      #hogeで指定したもののみ抽出した結果をoutに格納(dataオブジェクトは行列ではないことに注意!)
length(out)                            #オブジェクトoutの要素数を表示

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

イントロ | 一般 | ランダムな塩基配列を生成

タイトル通り、「任意の長さ」で「任意の塩基組成」からなるつランダムな塩基配列を生成するやり方を示します。 A,C,G,Tの数値を指定することで任意の塩基組成にできるようになっています。指定する数値の合計は別に100にならなくてもかまいません。 例えば「全てを1にしておけば、四種類の塩基の出現確率の期待値が25%」になりますし、「A=0, C=705, G=89, T=206みたいな指定法だと、 (数値の合計が1000なので)塩基Cの出現確率が70.5%」みたいなこともできます。

1. 50塩基の長さのランダムな塩基配列を生成する場合:

塩基の存在比はAが20%, Cが30%, Gが30%, Tが20%にしています。

param_len_ref <- 50                    #配列長を指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(20, 30, 30, 20) #(A,C,G,Tの並びで)各塩基の存在比率を指定

#本番(リファレンス配列生成)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
reference                              #確認してるだけです
	

2. 塩基配列を生成させて任意のdescription("kkk")を追加してFASTA形式ファイルで保存したい場合:

70塩基の長さのランダムな塩基配列を生成するやり方です。 塩基の存在比はAが23%, Cが27%, Gが28%, Tが22%にしています。

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param_len_ref <- 70                    #配列長を指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(23, 27, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番(配列生成)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
reference                              #確認してるだけです

#本番(FASTA形式に変換)
fasta <- DNAStringSet(reference)       #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
names(fasta) <- param_desc             #description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. 任意の配列長をもつものを複数個作ってmulti-FASTAファイルとして保存したい場合:

24, 103, 65の配列長をもつ、計3つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。

out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param_len_ref <- c(24, 103, 65)        #配列長を指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(20, 30, 30, 20) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_desc <- "contig"                 #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番(配列生成)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
hoge <- NULL                           #hogeというプレースホルダの作成
for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
    hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
}

#本番(FASTA形式に変換)
fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. 配列長情報を含むファイル(seq_length.txt; 中身は「24, 103, 65, 49」という4行からなる数値情報)を読み込む場合:

塩基の存在比はAが26%, Cが27%, Gが24%, Tが23%にしています。

in_f <- "seq_length.txt"               #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(26, 27, 24, 23) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_desc <- "contig"                 #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
param_len_ref <- readLines(in_f)       #in_fで指定したファイルの読み込み

#本番(配列生成)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
hoge <- NULL                           #hogeというプレースホルダの作成
for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
    hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
}

#本番(FASTA形式に変換)
fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. 同一パラメータを与えたときには常に同じ塩基配列が生成されるようにしたい場合:

48, 160, 100, 123の配列長をもつ、計4つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。 塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を追加しているだけです。

out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番(配列生成)
set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
hoge <- NULL                           #hogeというプレースホルダの作成
for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
    hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
}

#本番(FASTA形式に変換)
fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
names(fasta) <- paste(param_desc, 1:length(hoge), sep="_")#description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. 同一パラメータを与えたときには常に同じ塩基配列が生成されるようにしたい場合2:

48, 160, 100, 123の配列長をもつ、計4つの塩基配列を生成しています。 description行は"contig"という記述を基本としています。 塩基の存在比はAが28%, Cが22%, Gが26%, Tが24%にしています。 set.seed関数を追加し、chr3の配列と同じものをchr5としてコピーして作成したのち、一部の塩基置換を行っています。

out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
param_len_ref <- c(48, 160, 100, 123)  #配列長を指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(28, 22, 26, 24) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_desc <- "chr"                    #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#塩基置換関数の作成
enkichikan <- function(fa, p) {        #関数名や引数の作成
  t <- substring(fa, p, p)             #置換したい位置の塩基を取りだす
  t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
  substring(fa, p, p) <- t_c           #置換
  return(fa)                           #置換後のデータを返す
}

#本番(配列生成)
set.seed(1000)                         #おまじない(同じ乱数になるようにするため)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
hoge <- NULL                           #hogeというプレースホルダの作成
for(i in 1:length(param_len_ref)){     #length(param_len_ref)で表現される配列数分だけループを回す
    hoge <- c(hoge, paste(sample(ACGTset, param_len_ref[i], replace=T), collapse=""))#ACGTsetの文字型ベクトルからparam_len_ref[i]回分だけ復元抽出して得られた塩基配列をhogeに格納
}

#本番(chr3の配列をchr5としてコピーし、2番目と7番目の塩基をそれぞれ置換)
hoge <- c(hoge, hoge[3])               #chr3に相当する配列を追加している
hoge[5] <- enkichikan(hoge[5], 2)      #hoge[5]の2番目の塩基を置換
hoge[5] <- enkichikan(hoge[5], 7)      #hoge[5]の7番目の塩基を置換

#本番(FASTA形式に変換)
fasta <- DNAStringSet(hoge)            #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をfastaに格納
names(fasta) <- paste(param3, 1:length(hoge), sep="_")#description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 任意の長さの可能な全ての塩基配列を作成

Biostringsパッケージを用いて"A", "C", "G", "T"からなる 任意の長さのk塩基(k-mer)からなる全ての塩基配列を作成するやり方を示します。

「ファイル」−「ディレクトリの変更」で出力結果ファイルを保存したいディレクトリに移動し以下をコピペ。

1. k=3として、4k = 43 = 64通りの3塩基からなる可能な配列を作成したい場合:

out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 3                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番
out <- mkAllStrings(c("A", "C", "G", "T"), param_kmer)#k連続塩基の全ての可能な配列情報をoutに格納

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

2. k=5として、4k = 45 = 1024通りの5塩基からなる可能な配列を作成したい場合:

out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 5                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番
out <- mkAllStrings(c("A", "C", "G", "T"), param_kmer)#k連続塩基の全ての可能な配列情報をoutに格納

#ファイルに保存
writeLines(out, out_f)                 #outの中身を指定したファイル名で保存
	

イントロ | 一般 | 任意の位置の塩基を置換

任意の位置の塩基を置換するやり方を示します。ベタな書き方ですがとりあえず。。。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- 5                            #置換したい塩基の位置を指定
param2 <- "G"                          #置換後の塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです
hoge <- as.character(fasta)            #文字列に置換

#本番
substring(hoge, param1, param1) <- param2#param1で指定した位置の塩基をparam2で指定した塩基に置換
hoge <- DNAStringSet(hoge)             #DNAStringSetオブジェクトに変換した結果をhogeに格納
names(hoge) <- names(fasta)            #description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. FASTA形式ファイル(sample2.fasta)の場合:

in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- 5                            #置換したい塩基の位置を指定
param2 <- "G"                          #置換後の塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです
hoge <- as.character(fasta)            #文字列に置換

#本番
substring(hoge, param1, param1) <- param2#param1で指定した位置の塩基をparam2で指定した塩基に置換
hoge <- DNAStringSet(hoge)             #DNAStringSetオブジェクトに変換した結果をhogeに格納
names(hoge) <- names(fasta)            #description部分の情報に相当するnames(fasta)をnames(hoge)に格納している
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. FASTA形式ファイル(sample2.fasta)の場合:

param1で指定した位置の塩基を相補鎖(C -> G, G -> C, A -> T, T -> A)に置換するやり方です。そのような関数を作成して実行しています。

in_f <- "sample2.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- 5                            #置換したい塩基の位置を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#塩基置換関数の作成
DNAString_chartr <- function(fa, p) {  #関数名や引数の作成
  str_list <- as.character(fa)         #文字列に変更
  t <- substring(str_list, p, p)       #置換したい位置の塩基を取りだす
  t_c <- chartr("CGAT", "GCTA", t)     #置換後の塩基を作成
  substring(str_list, p, p) <- t_c     #置換
  fa_r <- DNAStringSet(str_list)       #DNAStringSetオブジェクトに戻す
  names(fa_r) <- names(fa)             #description部分の情報を追加
  return(fa_r)                         #置換後のデータを返す
}

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- DNAString_chartr(fasta, param1)#param1で指定した位置の塩基置換を実行した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 指定した範囲の配列を取得 | について

Biostringsは挙動を確認しながら中身を理解したいヒトなどの初心者向け。 慣れてきたら、BEDToolsのmulticovプログラム(根拠はMLSeqパッケージマニュアル)などを用いてサクサクやっていきます。 Galaxyでもできるはずです。

R用:

イントロ | 一般 | 指定した範囲の配列を取得 | Biostrings

Biostringsパッケージ中のsubseq関数を用いて、 single-FASTA形式やmulti-FASTA形式ファイルから様々な部分配列を取得するやり方を示します。 この項目は、「この染色体の、ここから、ここまで」という指定の仕方になります。 例えば入力ファイルがヒトゲノムだった場合に、chr3の20000から500000の座標の配列取得を行いたい場合などに利用します。 したがって、chr4とchr8の配列のみ抽出といったやり方には対応していませんのでご注意ください。 また、ファイルダウンロード時に、*.fastaという拡張子が*.txtに勝手に変更されることがありますのでご注意ください。 ここでは、

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. (single-)FASTA形式ファイル(sample1.fasta)の場合:

任意の範囲 (始点が3, 終点が9)の配列を抽出するやり方です。

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param <- c(3, 9)                       #抽出したい範囲の始点と終点を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- subseq(fasta, param[1], param[2])#paramで指定した始点と終点の範囲の配列を抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

任意のRefSeq ID (例:NM_203348.1)の任意の範囲 (例:始点が2, 終点が5)の配列の抽出を行うやり方です。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "NM_203348.1"                #取得したい配列のアクセッション番号を指定
param2 <- c(2, 5)                      #抽出したい範囲の始点と終点を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- as.logical(names(fasta) == param1)        #条件を満たすかどうかを判定した結果をobjに格納
fasta <- subseq(fasta[obj], param2[1], param2[2])#objがTRUEとなる配列のみに対して、param2で指定した始点と終点の範囲の配列を抽出した結果をfasta格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub1.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub1.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
    obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
    hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeにどんどん格納している
}
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub2.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub2.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
    obj <- names(fasta) == posi[i,1]   #条件を満たすかどうかを判定した結果をobjに格納
    hoge <- append(hoge, subseq(fasta[obj], start=posi[i,2], end=posi[i,3]))#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をhogeにどんどん格納している
}
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. multi-FASTA形式のファイル (ref_genome.fa)ファイルの場合:

目的のaccession番号が複数ある場合に対応したものです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_sub3.txt) を読み込ませて、目的の部分配列のmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub3.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
  obj <- names(fasta) == posi[i,1]     #条件を満たすかどうかを判定した結果をobjに格納
  tmp <- subseq(fasta[obj], start=posi[i,2], end=posi[i,3])#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をtmpに格納
  hoge <- append(hoge, tmp)            #tmpの情報をhogeに追加で格納
}
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分の作成)
description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
names(fasta) <- description            #description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. multi-FASTA形式のファイル (genome.fna)ファイルの場合:

例題5と基本的に同じで、入力ファイルが異なるだけです。 予め用意しておいた「1列目:accession, 2列目:start位置, 3列目:end位置」からなるリストファイル (list_20190513.txt) を読み込ませて、2,311個のCDSからなるmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "genome.fna"                  #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_20190513.txt"           #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
  obj <- names(fasta) == posi[i,1]     #条件を満たすかどうかを判定した結果をobjに格納
  tmp <- subseq(fasta[obj], start=posi[i,2], end=posi[i,3])#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をtmpに格納
  hoge <- append(hoge, tmp)            #tmpの情報をhogeに追加で格納
}
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分の作成)
description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
names(fasta) <- description            #description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

7. multi-FASTA形式のファイル (genome.fna)ファイルの場合:

例題6と基本的に同じですが、4列目にストランド情報を含むリストファイル (list_20190513_strand.txt) を読み込ませて、ストランドを適切に反映させた2,311個のCDSからなるmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "genome.fna"                  #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_20190513_strand.txt"    #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
posi <- read.table(in_f2)              #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:nrow(posi)){                #length(posi)回だけループを回す
  obj <- names(fasta) == posi[i,1]     #条件を満たすかどうかを判定した結果をobjに格納
  tmp <- subseq(fasta[obj], start=posi[i,2], end=posi[i,3])#subseq関数を用いてobjがTRUEとなるもののみに対して、posi[i,2]とposi[i,3]で与えた範囲に対応する部分配列を抽出した結果をtmpに格納
  if(posi[i,4] == "-"){tmp <- reverseComplement(tmp)}#ストランドが"-"の場合は逆相補鎖にする
  hoge <- append(hoge, tmp)            #tmpの情報をhogeに追加で格納
}
fasta <- hoge                          #hogeの中身をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分の作成)
description <- paste(posi[,1], posi[,2], posi[,3], sep="_")#行列posiの各列を"_"で結合したものをdescriptionに格納
names(fasta) <- description            #description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 指定したID(染色体やdescription)の配列を取得

multi-FASTA形式ファイルからリストファイルで指定したID (description行の記載内容と全く同じ染色体名などの配列ID)の配列を取得するやり方を示します。 例えば入力ファイルがヒトゲノムだった場合に、chr4とchr8の配列のみ抽出したい場合などに利用します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

任意のRefSeq ID NM_203348.1の配列抽出を行うやり方です。 ファイルダウンロード時に、*.fastaという拡張子が*.txtに勝手に変更されることがありますのでご注意ください。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "NM_203348.1"                #取得したい配列のアクセッション番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

うまくいかない例です。NM_203348.1は確かに入力ファイル中に存在するが、 バージョン情報を除いたNM_203348だとうまくいきません。 理由は、両者の文字列は完全に同じというわけではないからです。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "NM_203348"                  #取得したい配列のアクセッション番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

うまくいかない例です。"NM_203348.1"は確かに入力ファイル中に存在するが、 スペースが余分に含まれる"NM_203348.1 "だとうまくいきません。 理由は、両者の文字列は完全に同じというわけではないからです。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "NM_203348.1 "               #取得したい配列のアクセッション番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- as.logical(names(fasta) == param1)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub5.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub5.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. RefSeqのhuman mRNAのmulti-FASTA形式のファイル (h_rna.fasta)の場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub6.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。 バージョン番号やスペースを含むIDは抽出できないという例です。 リスト中の3つのうち、最後のIDの配列のみ抽出できていることがわかります。

in_f1 <- "h_rna.fasta"                 #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub6.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub7.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。 "contig_2"の配列は取得できていますが、"contig_4"の配列は取得できていないことがわかります。 理由は、"contig_4 "とスペースが入っているためです。

in_f1 <- "hoge4.fa"                    #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub7.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

7. multi-FASTA形式のファイル (ref_genome.fa)ファイルの場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

in_f1 <- "ref_genome.fa"               #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

8. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在しますが、それがそのまま反映されていることが分かります。

in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

9. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在します。 それがそのまま反映されるのが嫌で、重複を除きたい(non-redundantにしたい)場合があります。それに対応したやり方です。

in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge9.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです
fasta <- unique(fasta)                 #重複を除いてnon-redundantにした結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

9. multi-FASTA形式のファイル (ref_genome_redun.fa)ファイルの場合:

目的のIDが複数ある場合に対応したものです。予め用意しておいたリストファイル (list_sub8.txt) を読み込ませて、目的の配列のmulti-FASTAファイルをゲットするやり方です。

指定したつもりの4つの染色体番号のうち、"chr1 "はスペースのため、そして"chr_5"は余分な文字の挿入のため抽出できていないことがわかります。

multi-FASTAの入力ファイルは、chr4という全く同じ配列が重複して存在します。 それがそのまま反映されるのが嫌で、重複を除きたい(non-redundantにしたい)場合があります。それに対応したやり方です。

FASTA形式ファイルの読み込み部分で、Biostringsパッケージ中のreadDNAStringSet関数ではなく、seqinrパッケージ中のread.fasta関数を用いるやり方です。

in_f1 <- "ref_genome_redun.fa"         #入力ファイル名を指定してin_f1に格納(multi-FASTAファイル)
in_f2 <- "list_sub8.txt"               #入力ファイル名を指定してin_f2に格納(リストファイル)
out_f <- "hoge10.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(seqinr)                        #パッケージの読み込み

#入力ファイルの読み込みとDNAStringSet形式への変換
hoge <- read.fasta(in_f, seqtype="DNA", as.string=TRUE)#in_fで指定したファイルの読み込み
fasta <- DNAStringSet(as.character(hoge))#型変換
names(fasta) <- names(hoge)            #型変換
keywords <- readLines(in_f2)           #in_f2で指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
obj <- is.element(names(fasta), keywords)#条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる配列のみを抽出した結果をfastaに格納
fasta                                  #確認してるだけです
fasta <- unique(fasta)                 #重複を除いてnon-redundantにした結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 翻訳配列(translate)を取得 | について

塩基配列を入力として、アミノ酸配列を取得するプログラムです。 Galaxyでもできるはずです。

イントロ | 一般 | 翻訳配列(translate)を取得 | Biostrings

Biostringsパッケージを用いて塩基配列を読み込んでアミノ酸配列に翻訳するやり方を示します。 翻訳のための遺伝コード(genetic code)は、Standard Genetic Codeだそうです。 もちろん生物種?!によって多少違い(variants)があるようで、"Standard", "SGC0", "Vertebrate Mitochondrial", "SGC1"などいろいろ選べるようです。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

multi-FASTAではないsingle-FASTA形式ファイルです。

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta)              #アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

配列中にACGT以外のものが存在するためエラーが出る例です。 4番目の配列(つまりgene_4)の17番目のポジションがNなので妥当です。

in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta)              #アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

エラーへの対策として、ACGTのみからなる配列を抽出したサブセットを抽出しています。 翻訳はそれらのサブセットのみに対して行っているので「文字が塩基ではない」という類のエラーがなくなっていることがわかります。 出力ファイル中の*は終始コドン(stop codon)を表すようですね。

in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(ACGTのみからなる配列を抽出)
#hoge <- rowSums(alphabetFrequency(fasta)[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納(2015年9月12日以前の記述)
hoge <- apply(as.matrix(alphabetFrequency(fasta)[,1:4]), 1, sum)#A,C,G,Tの総数を計算してhogeに格納(2015年9月12日以降の記述)
obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta)              #アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. multi-FASTA形式ファイル(h_rna.fasta)の場合:

配列中にNを含むものが出現したところでエラーが出て止まる例です。 「以下にエラー .Call2("DNAStringSet_translate", x, skip_code, dna_codes[codon_alphabet], : in 'x[[406]]': not a base at pos 498」といったエラーが見られると思います。 これは406番目の配列の498番目のポジションの文字が塩基ではないと文句を言っています。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta)              #アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. multi-FASTA形式ファイル(h_rna.fasta)の場合:

エラーへの対策として、ACGTのみからなる配列を抽出したサブセットを抽出しています。 翻訳はそれらのサブセットのみに対して行っているのでエラーは出なくなっていることがわかります。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(ACGTのみからなる配列を抽出)
#hoge <- rowSums(alphabetFrequency(fasta)[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納(2015年9月12日以前の記述)
hoge <- apply(as.matrix(alphabetFrequency(fasta)[,1:4]), 1, sum)#A,C,G,Tの総数を計算してhogeに格納(2015年9月12日以降の記述)
obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta)              #アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. multi-FASTA形式ファイル(h_rna.fasta)の場合:

5.と基本的に同じです。translate関数実行時に、genetic.codeオプションのデフォルトを明記しています。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(ACGTのみからなる配列を抽出)
hoge <- rowSums(alphabetFrequency(fasta)[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta, genetic.code=GENETIC_CODE)#アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

7. multi-FASTA形式ファイル(h_rna.fasta)の場合:

translate関数実行時に、genetic.codeオプションをgetGeneticCode("SGC1")に変更しています。 遺伝コードが変わっているので、6.と異なった結果となります。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(ACGTのみからなる配列を抽出)
#hoge <- rowSums(alphabetFrequency(fasta)[,1:4])#A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納(2015年9月12日以前の記述)
hoge <- apply(as.matrix(alphabetFrequency(fasta)[,1:4]), 1, sum)#A,C,G,Tの総数を計算してhogeに格納(2015年9月12日以降の記述)
obj <- (width(fasta) == hoge)          #条件を満たすかどうかを判定した結果をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#本番
fasta <- translate(fasta, genetic.code=getGeneticCode("SGC1"))#アミノ酸配列に翻訳した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 翻訳配列(translate)を取得 | seqinr(Charif_2005)

seqinrパッケージを用いて塩基配列を読み込んでアミノ酸配列に翻訳するやり方を示します。 本気で翻訳配列を取得する場合にはこちらの利用をお勧めします。翻訳できないコドンはアミノ酸X(不明なアミノ酸)に変換してくれたり、 translate関数のオプションとしてambiguous=Tとすると、翻訳できるものは可能な限り翻訳してくれます(高橋 広夫 氏提供情報)。 lapply関数を用いるやり方(高橋 広夫 氏提供情報)とsapply関数を用いるやり方(甲斐 政親 氏提供情報)を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

multi-FASTAではないsingle-FASTA形式ファイルです。

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(seqinr)                        #パッケージの読み込み

#入力ファイルの読み込み
hoge <- read.fasta(in_f, seqtype="DNA")#in_fで指定したファイルの読み込み
hoge                                   #確認してるだけです

#本番
hoge <- lapply(hoge, function(x){      #アミノ酸配列に翻訳
              translate(x, ambiguous=T)#アミノ酸配列に翻訳
        })                             #アミノ酸配列に翻訳
hoge                                   #確認してるだけです

#ファイルに保存
write.fasta(hoge, names=names(hoge), file.out=out_f, nbchar=50)#hogeの中身を指定したファイル名で保存
	

2. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

lapply関数を用いるやり方です。

in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(seqinr)                        #パッケージの読み込み

#入力ファイルの読み込み
hoge <- read.fasta(in_f, seqtype="DNA")#in_fで指定したファイルの読み込み
hoge                                   #確認してるだけです

#本番
hoge <- lapply(hoge, function(x){      #アミノ酸配列に翻訳
              translate(x, ambiguous=T)#アミノ酸配列に翻訳
        })                             #アミノ酸配列に翻訳
hoge                                   #確認してるだけです

#ファイルに保存
write.fasta(hoge, names=names(hoge), file.out=out_f, nbchar=50)#hogeの中身を指定したファイル名で保存
	

3. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

sapply関数を用いるやり方です。

in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(seqinr)                        #パッケージの読み込み

#入力ファイルの読み込み
hoge <- read.fasta(in_f, seqtype="DNA")#in_fで指定したファイルの読み込み
hoge                                   #確認してるだけです

#本番
hoge <- sapply(hoge, function(x){      #アミノ酸配列に翻訳
              translate(x, ambiguous=T)#アミノ酸配列に翻訳
        })                             #アミノ酸配列に翻訳
hoge                                   #確認してるだけです

#ファイルに保存
write.fasta(hoge, names=names(hoge), file.out=out_f, nbchar=50)#hogeの中身を指定したファイル名で保存
	

4. (multi-)FASTA形式ファイル(sample4.fasta)の場合:

ファイルの入出力はBiostringsパッケージ、翻訳はseqinrパッケージを利用するやり方です。 Biostringとseqinrで同じtranslate関数が存在するため、 「seqinr::translate」として明示的にseqinrパッケージ中のtranslate関数を利用すると宣言しています。

in_f <- "sample4.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(seqinr)                        #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge2 <- sapply(fasta, function(x){    #アミノ酸配列に翻訳
            hoge <- as.character(x)    #アミノ酸配列に翻訳
            c2s(seqinr::translate(s2c(hoge), ambiguous=T))#アミノ酸配列に翻訳
        })                             #アミノ酸配列に翻訳
fasta <- AAStringSet(hoge2)            #AAStringSet形式に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 相補鎖(complement)を取得

Biostringsパッケージ中のcomplement関数を用いて、FASTA形式ファイルを読み込んで相補鎖を得るやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- complement(fasta)             #fastaオブジェクトの相補鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- complement(fasta)             #fastaオブジェクトの相補鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 逆相補鎖(reverse complement)を取得

Biostringsパッケージ中のreverseComplement関数を用いて、FASTA形式ファイルを読み込んで逆相補鎖を得るやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- reverseComplement(fasta)      #fastaオブジェクトの逆相補鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- reverseComplement(fasta)      #fastaオブジェクトの逆相補鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 逆鎖(reverse)を取得

Biostringsパッケージ中のreverse関数を用いて、FASTA形式ファイルを読み込んで逆鎖を得るやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. FASTA形式ファイル(sample1.fasta)の場合:

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- reverse(fasta)                #fastaオブジェクトの逆鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. multi-FASTA形式ファイル(h_rna.fasta)の場合:

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
fasta <- reverse(fasta)                #fastaオブジェクトの逆鎖をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | k-mer解析 | k=1(塩基ごとの出現頻度解析) | Biostrings

Biostringsパッケージを用いて、multi-FASTA形式ファイルを読み込んで、"A", "C", "G", "T", ..., "N", ...など塩基ごとの出現頻度を調べるやり方を示します。 k-mer解析のk=1の場合に相当します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

配列ごとに出現頻度をカウントした結果を返すやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- alphabetFrequency(fasta)        #A,C,G,T,..の数を各配列ごとにカウントした結果をoutに格納
out                                    #outの中身を表示

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
	

2. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

1と基本的に同じで、出力結果を"A", "C", "G", "T", "N"のみに限定するやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
obj                                    #objの中身を表示
out <- hoge[, obj]                     #objで指定した列のみ抽出した結果をoutに格納
out                                    #outの中身を表示

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=T)#tmpの中身を指定したファイル名で保存
	

3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

配列ごとではなく、全配列をまとめて出現頻度をカウントした結果を返すやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
#out <- colSums(hoge[, obj])           #列ごとの総和をoutに格納
out <- apply(as.matrix(hoge[, obj]), 2, sum)#列ごとの総和をoutに格納

#ファイルに保存
tmp <- rbind(names(out), out)          #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
	

4. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

3と基本的に同じ結果ですが、転置させています。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
#out <- colSums(hoge[, obj])           #列ごとの総和をoutに格納
out <- apply(as.matrix(hoge[, obj]), 2, sum)#列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
	

5. FASTA形式ファイル(sample1.fasta)の場合:

multi-FASTAではないsingle-FASTA形式ファイルです。 colSums関数は行列データにしか適用できないが、apply(as.matrix...)とすることでmulti-FASTAでもsingle-FASTAでも統一的に取り扱えることがわかります。 と書いてますが挙動が変(R ver. 3.2.3)なので、変更予定です(2016年4月27日追加)。

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
out <- colSums(hoge[, obj])            #列ごとの総和をoutに格納
#out <- apply(as.matrix(hoge[, obj]), 2, sum)#列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#tmpの中身を指定したファイル名で保存
	

6. FASTA形式ファイル(sample1.fasta)の場合:

multi-FASTAではないsingle-FASTA形式ファイルです。 colSums関数は行列データにしか適用できないが、apply(as.matrix...)とすることでmulti-FASTAでもsingle-FASTAでも統一的に取り扱えることがわかります。 と書いてますが挙動が変(R ver. 3.2.3)なので、変更予定です(2016年4月27日追加)。

in_f <- "sample1.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
#out <- colSums(hoge[, obj])           #列ごとの総和をoutに格納
#out <- apply(as.matrix(hoge[, obj]), 2, sum)#列ごとの総和をoutに格納
out <- hoge[, obj]                     #objがTRUEとなる列のみ抽出した結果をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#tmpの中身を指定したファイル名で保存
	

7. FASTA形式ファイル(out_gapClosed.fa)の場合:

DDBJ Pipeline (Nagasaki et al., DNA Res., 2013)上で de novoゲノムアセンブリプログラムPlatanus (Kajitani et al., Genome Res., 2014) を実行して得られたmulti-FASTA形式ファイル(out_gapClosed.fa; 約2.4MB)です。

in_f <- "out_gapClosed.fa"             #入力ファイル名を指定してin_fに格納
out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
param_base <- c("A", "C", "G", "T", "N")#出力させたい塩基を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を各配列ごとにカウントした結果をhogeに格納
obj <- is.element(colnames(hoge), param_base)#条件を満たすかどうかを判定した結果をobjに格納
#out <- colSums(hoge[, obj])           #列ごとの総和をoutに格納
out <- apply(as.matrix(hoge[, obj]), 2, sum)#列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | 一般 | k-mer解析 | k=2(2連続塩基の出現頻度解析) | Biostrings

Biostringsパッケージを用いて、multi-FASTA形式ファイルを読み込んで、"AA", "AC", "AG", "AT", "CA", "CC", "CG", "CT", "GA", "GC", "GG", "GT", "TA", "TC", "TG", "TT" の計42 = 16通りの2連続塩基の出現頻度を調べるやり方を示します。k-mer解析のk=2の場合に相当します。 ヒトゲノムで"CG"の割合が期待値よりも低い(Lander et al., 2001; Saxonov et al., 2006)ですが、それを簡単に検証できます。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

タイトル通りの出現頻度です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta)    #連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

出現頻度ではなく、出現確率を得るやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

3. multi-FASTA形式ファイル(h_rna.fasta)の場合:

406番目のID (NR_002762.1)の塩基配列の498番目の文字が"N"なはずなのですが、これはどのように計算されているのでしょうか。。。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta)    #連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

4. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.UCSC.hg19)の場合:

タイトル通りの出現頻度です。イントロ | 一般 | 配列取得 | ゲノム配列 | BSgenome中のゲノム配列取得手順を含んでいます。

out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta)    #連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

5. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.UCSC.hg19)の場合:

出現頻度ではなく、出現確率を得るやり方です。

out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

6. シロイヌナズナゲノム配列パッケージ(BSgenome.Athaliana.TAIR.TAIR9)の場合:

出現頻度ではなく、出現確率を得るやり方です。パッケージがインストールされていない場合は、 インストール | Rパッケージ | 個別を参考にしてインストールしてから再度チャレンジ。

out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

7. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

2013年12月にリリースされたGenome Reference Consortium GRCh38です。出力は出現確率です。

out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

8. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

全配列を合算して、連続塩基ごとの出現頻度(frequency)と出現確率(probability)を出力するやり方です。 dinucleotideFrequency関数中の「simplify.as="collapsed"」オプションでも一応実行できますが、 桁が多くなりすぎて「整数オーバーフロー」問題が起きたのでやめてます。

out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
hoge <- dinucleotideFrequency(fasta, as.prob=F)#連続塩基の出現頻度情報をhogeに格納
frequency <- colSums(hoge)             #列ごとの総和をfrequencyに格納
probability <- frequency / sum(frequency)#出現確率を計算した結果をprobabilityに格納
frequency                              #中身を表示
sort(frequency, decreasing=F)          #値の小さい順にソートした結果を表示

#ファイルに保存
tmp <- cbind(names(frequency), frequency, probability)#保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

9. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

基本的に7.と同じです。7.の手順がややこしいと思う人向けの解説用です。 簡単に言えば、パッケージ名を2回書かなくて済むテクニックを用いているだけです。 もう少し詳細に書くと、BSgenomeパッケージはlibrary関数で読み込んだ後にパッケージ名と同じ名前のオブジェクトを利用できるようになります。 例えばBSgenome.Hsapiens.NCBI.GRCh38パッケージの場合は、BSgenome.Hsapiens.NCBI.GRCh38 という名前のオブジェクトを利用できるようになります。 ベタで書くと2回BSgenome.Hsapiens.NCBI.GRCh38を記述する必要性があるため、間違う確率が上昇します。 7.のように一見ややこしく書けば、結果的に一度のみの記述で済むのです。

out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(BSgenome.Hsapiens.NCBI.GRCh38) #パッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls("package:BSgenome.Hsapiens.NCBI.GRCh38")#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

10. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

7.と基本的に同じですが、box plotのPNGファイルも出力しています。

out_f1 <- "hoge10.txt"                 #出力ファイル名を指定してout_f1に格納
out_f2 <- "hoge10.png"                 #出力ファイル名を指定してout_f2に格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_fig <- c(700, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存(テキストファイル)
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存

#ファイルに保存(pngファイル)
png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
boxplot(out, ylab="Probability")       #描画
grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
dev.off()                              #おまじない
	

11. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

10.と基本的に同じですが、連続塩基の種類ごとの期待値とボックスプロット(box plot)上での色情報を含むファイル (human_2mer.txt)を入力として利用し、色情報のみを取り出して利用しています。

in_f <- "human_2mer.txt"               #入力ファイル名を指定してin_fに格納
out_f1 <- "hoge11.txt"                 #出力ファイル名を指定してout_f1に格納
out_f2 <- "hoge11.png"                 #出力ファイル名を指定してout_f2に格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_fig <- c(700, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#ファイルに保存(テキストファイル)
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存

#ファイルに保存(pngファイル)
png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
boxplot(out, ylab="Probability", col=as.character(data$color))#描画
grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
dev.off()                              #おまじない
	

12. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

11.と基本的に同じですが、human_2mer.txtというファイルを入力として与えて、 連続塩基の種類ごとの期待値とボックスプロット(box plot)上での色情報を利用しています。 また、重要なのは期待値からの差分であり、「プロットも期待値(expected)と同程度の観測値(observed)であればゼロ、 観測値のほうが大きければプラス、観測値のほうが小さければマイナス」といった具合で表現したほうがスマートです。 それゆえ、box plotの縦軸をlog(observed/expected)として表現しています。 CG以外の連続塩基は縦軸上でが0近辺に位置していることが分かります。

in_f <- "human_2mer.txt"               #入力ファイル名を指定してin_fに格納
out_f1 <- "hoge12.txt"                 #出力ファイル名を指定してout_f1に格納
out_f2 <- "hoge12.png"                 #出力ファイル名を指定してout_f2に格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_fig <- c(700, 400)               #ファイル出力時の横幅と縦幅を指定(単位はピクセル)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番
out <- dinucleotideFrequency(fasta, as.prob=T)#連続塩基の出現確率情報をoutに格納

#後処理(log(observed/expected)に変換)
logratio <- log2(out/data$expected)    #log(observed/expected)の計算結果をlogratioに格納

#ファイルに保存(テキストファイル)
tmp <- cbind(names(fasta), logratio)   #保存したい情報をtmpに格納
write.table(tmp, out_f1, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存

#ファイルに保存(pngファイル)
png(out_f2, pointsize=13, width=param_fig[1], height=param_fig[2])#出力ファイルの各種パラメータを指定
boxplot(logratio, ylab="log2(observed/expected)",#描画
        col=as.character(data$color))  #描画
grid(col="gray", lty="dotted")         #指定したパラメータでグリッドを表示
dev.off()                              #おまじない
	

イントロ | 一般 | k-mer解析 | k=3(3連続塩基の出現頻度解析) | Biostrings

Biostringsパッケージを用いて、43 = 64 通りの3連続塩基の出現頻度を調べるやり方を示します。k-mer解析のk=3の場合に相当します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
out <- trinucleotideFrequency(fasta)   #3連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. 130MB程度のRefSeqのhuman mRNAのmulti-FASTAファイル(h_rna.fasta)の場合:

406番目のID (NR_002762.1)の塩基配列の498番目の文字が"N"なはずなのですが、これはどのように計算されているのでしょうか。。。

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
out <- trinucleotideFrequency(fasta)   #3連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | 一般 | k-mer解析 | k=n(n連続塩基の出現頻度解析) | Biostrings

Biostringsパッケージを用いて、4n通りの任意のn連続塩基の出現頻度を調べるやり方を示します。k-mer解析のk=nの場合に相当します。 例えば2連続塩基の場合はk=2, 3連続塩基の場合はk=3と指定します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

4連続塩基(k=4)の出現頻度情報を得るやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 4                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

2連続塩基(k=2)の出現頻度情報を得るやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 2                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

2連続塩基(k=2)の全配列をまとめた出現頻度情報を得るやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 2                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer, simplify.as="collapsed")#k連続塩基の全配列をまとめた出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(out), out)          #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

4. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

2連続塩基(k=2)の全配列をまとめた出現確率情報を得るやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 2                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer, simplify.as="collapsed", as.prob=TRUE)#k連続塩基の全配列をまとめた出現確率情報をoutに格納

#ファイルに保存
tmp <- cbind(names(out), out)          #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

5. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

10連続塩基(k=10)の出現頻度情報を得るやり方です。4^10 = 1,048,576(105万)通りのk-merの出現頻度を計算することになります。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 10                       #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

6. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

15連続塩基(k=15)の出現頻度情報を得るやり方です。4^15 = 1,073,741,824(約11億)通りのk-merの出現頻度を計算することになります。 8GBメモリマシンで実行すると、「エラー: サイズ 16.0 Gb のベクトルを割り当てることができません」となります。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 15                       #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

7. サンプルデータの例題32を実行して得られたmulti-FASTAファイル(sample32_ngs.fasta)の場合:

2連続塩基(k=2)の出現頻度情報を得るやり方です。4^2 = 16通りのk-merの出現頻度を計算することになります。 リード毎に出現頻度を算出しています。

in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 2                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
out <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をoutに格納

#ファイルに保存
tmp <- cbind(names(fasta), out)        #最初の列にID情報、そのあとに出現頻度情報のoutを結合したtmpを作成
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

8. サンプルデータの例題32を実行して得られたmulti-FASTAファイル(sample32_ngs.fasta)の場合:

2連続塩基(k=2)の出現頻度情報を得るやり方です。4^2 = 16通りのk-merの出現頻度を計算することになります。 全リードを合算した出現頻度を出力するやり方です。

in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 2                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をhogeに格納
out <- colSums(hoge)                   #列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
	

9. サンプルデータの例題32を実行して得られたmulti-FASTAファイル(sample32_ngs.fasta)の場合:

3連続塩基(k=3)の出現頻度情報を得るやり方です。4^3 = 64通りのk-merの出現頻度を計算することになります。 全リードを合算した出現頻度を出力するやり方です。

in_f <- "sample32_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納
param_kmer <- 3                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をhogeに格納
out <- colSums(hoge)                   #列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
	

10. サンプルデータの例題33を実行して得られたmulti-FASTAファイル(sample33_ngs.fasta)の場合:

3連続塩基(k=3)の出現頻度情報を得るやり方です。4^3 = 64通りのk-merの出現頻度を計算することになります。 全リードを合算した出現頻度を出力するやり方です。

in_f <- "sample33_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge10.txt"                  #出力ファイル名を指定してout_fに格納
param_kmer <- 3                        #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をhogeに格納
out <- colSums(hoge)                   #列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
	

11. サンプルデータの例題33を実行して得られたmulti-FASTAファイル(sample33_ngs.fasta)の場合:

10連続塩基(k=10)の出現頻度情報を得るやり方です。4^10 = 1,048,576通りのk-merの出現頻度を計算することになります。 全リードを合算した出現頻度を出力するやり方です。

in_f <- "sample33_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge11.txt"                  #出力ファイル名を指定してout_fに格納
param_kmer <- 10                       #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をhogeに格納
out <- colSums(hoge)                   #列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
length(out)                            #4^param_kmerの値を表示
sum(out > 0)                           #1回以上出現したk-merの種類数を表示
	

12. サンプルデータの例題34を実行して得られたmulti-FASTAファイル(sample34_ngs.fasta)の場合:

10連続塩基(k=10)の出現頻度情報を得るやり方です。4^10 = 1,048,576通りのk-merの出現頻度を計算することになります。 全リードを合算した出現頻度を出力するやり方です。

in_f <- "sample34_ngs.fasta"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge12.txt"                  #出力ファイル名を指定してout_fに格納
param_kmer <- 10                       #k-merのkの値を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番
hoge <- oligonucleotideFrequency(fasta, width=param_kmer)#k連続塩基の出現頻度情報をhogeに格納
out <- colSums(hoge)                   #列ごとの総和をoutに格納

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=T, col.names=F)#outの中身を指定したファイル名で保存
length(out)                            #4^param_kmerの値を表示
sum(out > 0)                           #1回以上出現したk-merの種類数を表示
	

イントロ | 一般 | Tips | 任意の拡張子名でファイルを保存

出力ファイル名をわざわざ指定せずに、拡張子名のみ変えるやり方を示します。。(例:XXX.txtを読み込んでXXX.inuという拡張子で保存したい)

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

*.ugeというファイル名で保存するやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
param <- "uge"                         #拡張子名を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(拡張子を変えた出力ファイル名を作成)
out_f <- paste(unlist(strsplit(in_f, ".", fixed=TRUE))[1], param, sep=".")#出力ファイル名を作成してout_fに格納

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | Tips | 拡張子は同じで任意の文字を追加して保存

ファイル保存時に、拡張子名は変えずに、拡張子の手前に任意の文字(例:"_processed")を追加するやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

*_processed.faというファイル名で保存するやり方です。

ファイル名中に"."(ドット)が一つしかないという前提です

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
param <- "_processed"                  #追加したい文字列を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番()
hoge1 <- paste(".", unlist(strsplit(in_f, ".", fixed=TRUE))[2], sep="")#"."を含む拡張子部分をhoge1に格納
hoge2 <- paste(param, hoge1, sep="")   #置換後の文字列をhoge2に格納
out_f <- sub(hoge1, hoge2, in_f)       #出力ファイル名を作成してout_fに格納

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | ゲノム配列 | 公共DBから

イントロ | 一般 | 配列取得 | ゲノム配列 | BSgenome

BSgenomeパッケージを用いて様々な生物種のゲノム配列を取得するやり方を示します。 ミヤマハタザオ (A. lyrata)、セイヨウミツバチ (A. mellifera)、 シロイヌナズナ(A.thaliana)、ウシ(B.taurus)、線虫(C.elegans)、犬(C.familiaris)、キイロショウジョウバエ(D.melanogaster)、 ゼブラフィッシュ(D.rerio)、大腸菌(E.coli)、イトヨ(G.aculeatus)、セキショクヤケイ(G.gallus)、ヒト(H.sapiens)、 アカゲザル(M.mulatta)、マウス(M.musculus)、チンパンジー(P.troglodytes)、ラット(R.norvegicus)、出芽酵母(S.cerevisiae)、 トキソプラズマ(T.gondii)と実に様々な生物種が利用可能であることがわかります。 getSeq関数はBSgenomeオブジェクト中の「single sequences」というあたりにリストアップされているchr...というものを全て抽出しています。 したがって、例えばマウスゲノムは「chr1」以外に「chr1_random」や「chrUn_random」なども等価に取扱っている点に注意してください。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. 利用可能な生物種とRにインストール済みの生物種をリストアップしたい場合:

#必要なパッケージをロード
library(BSgenome)                      #パッケージの読み込み

#本番(利用可能なパッケージをリストアップ;インストール済みとは限らない)
available.genomes()                    #このパッケージ中で利用可能なゲノムをリストアップ

#本番(インストール済みの生物種をリストアップ)
installed.genomes()                    #インストール済みの生物種をリストアップ

#後処理(パッケージ名でだいたいわかるがproviderやversionを分割して表示したい場合)
installed.genomes(splitNameParts=TRUE) #インストール済みの生物種をリストアップ
	

2. ゼブラフィッシュ("BSgenome.Drerio.UCSC.danRer7")のゲノム情報をRにインストールしたい場合:

400MB程度あります...

param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定

#本番
source("http://bioconductor.org/biocLite.R")#おまじない
biocLite(param)                        #おまじない

#後処理(インストール済みの生物種をリストアップ)
installed.genomes()                    #インストール済みの生物種をリストアップ
	

3. インストール済みのゼブラフィッシュのゲノム配列をmulti-FASTAファイルで保存したい場合:

1.4GB程度のファイルが生成されます...

out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. インストール済みのマウス("BSgenome.Mmusculus.UCSC.mm9")のゲノム配列をmulti-FASTAファイルで保存したい場合:

2.8GB程度のファイルが生成されます...

out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Mmusculus.UCSC.mm9" #パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")のゲノム配列をmulti-FASTAファイルで保存したい場合:

3.0GB程度のファイルが生成されます...。ヒトゲノムは、まだ完全に22本の常染色体とX, Y染色体の計24本になっているわけではないことがわかります。

out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Hsapiens.UCSC.hg19" #パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg19")のゲノム配列をmulti-FASTAファイルで保存したい場合:

ヒトゲノムは、まだ完全に22本の常染色体とX, Y染色体の計24本になっているわけではないので、最初の主要な24本分のみにするやり方です。

out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定
param2 <- 24                           #取り出したい染色体数を指定(主要なものから順番に並んでいるので最初の24本に相当)

#必要なパッケージをロード
library(param1, character.only=T)      #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param1, ".", fixed=TRUE))[2]#指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param1, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta <- fasta[1:param2]               #染色体のフィルタリング

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

7. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")のゲノム情報をRにインストールしたい場合:

Rのパッケージをインストール後、ゲノム配列をmulti-FASTAファイルで保存する一連の手順です。 The Arabidopsis Information Resource (TAIR)(Reiser et al., Curr Protoc Bioinformatics., 2017) から得られる最新バージョンはTAIR10ですが、アセンブリ結果自体はTAIR9と同じと明記されています (README_whole_chromosomes.txt)。

param <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定

#本番
source("http://bioconductor.org/biocLite.R")#おまじない
biocLite(param, suppressUpdates=TRUE)  #おまじない

#後処理(インストール済みの生物種をリストアップ)
installed.genomes()                    #インストール済みの生物種をリストアップ
	

8. インストール済みのシロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")のゲノム配列をmulti-FASTAファイルで保存したい場合:

The Arabidopsis Information Resource (TAIR)(Reiser et al., Curr Protoc Bioinformatics., 2017) から得られる最新バージョンはTAIR10ですが、アセンブリ結果自体はTAIR9と同じと明記されています (README_whole_chromosomes.txt)。 120MB程度のファイルが生成されます...

out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

9. インストール済みのヒト("BSgenome.Hsapiens.NCBI.GRCh38")のゲノム配列をmulti-FASTAファイルで保存したい場合:

2013年12月にリリースされたGenome Reference Consortium GRCh38です。 R ver. 3.1.0とBioconductor ver. 2.14以上の環境で実行可能です。

out_f <- "hoge9.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

10. インストール済みのヒト("BSgenome.Hsapiens.NCBI.GRCh38")のゲノム配列のmulti-FASTAファイルで保存したい場合:

一部を抽出して保存するやり方です。このパッケージ中の染色体の並びが既知(chr1, 2, ..., chr22, chrX, chrY, and MT)であるという前提です。

out_f <- "hoge10.fasta"                #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定
param_range <- 1:25                    #抽出したい範囲を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#後処理(フィルタリング)
obj <- param_range                     #抽出したいリードの位置情報をobjに格納
fasta <- fasta[obj]                    #objがTRUEとなる要素のみ抽出した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

11. インストール済みのヒト("BSgenome.Hsapiens.UCSC.hg38")のゲノム配列をmulti-FASTAファイルで保存したい場合:

3.0GB程度のファイルが生成されます...。ヒトゲノムは、まだ完全に22本の常染色体とX, Y染色体の計24本になっているわけではないことがわかります。

out_f <- "hoge11.fasta"                #出力ファイル名を指定してout_fに格納
param <- "BSgenome.Hsapiens.UCSC.hg38" #パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理(paramで指定したパッケージ中のオブジェクト名をgenomeに統一)
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
genome                                 #確認してるだけです

#本番
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | プロモーター配列 | について

プロモーター(promoters)の大まかな定義は、遺伝子の転写制御を行う領域(regulatory regions)だと思います。 が、おそらくヒトによって具体的な定義は異なります(Cassiano and Silva-Rocha, mSystems, 2020)。 例えばChuangらは、転写開始点(Transcriptional Start Sites; TSS)の上流1,500塩基から下流500塩基と定義しています(Chuang et al., PLoS One, 2011)。 多くの場合、ヒトやマウスなどの哺乳類ゲノムの場合はこの領域にCpGアイランド(CpG islands or CpG islets; CGIs)をもつことが知られています。 プロモータには、CGIをもつものともたないものの2つのクラスがあるといった報告もあります(Saxonov et al., Proc Natl Acad Sci U S A., 2006)。

Rパッケージ:

R以外:

Review、ガイドライン、パイプライン系:

イントロ | 一般 | 配列取得 | プロモーター配列 | 公共DBから

イントロ | 一般 | 配列取得 | プロモーター配列 | BSgenomeとTxDbから

ゲノム配列(BSgenome)パッケージとアノテーション情報(TxDb)パッケージ を用いて様々な生物種のプロモーター配列(転写開始点近傍配列;上流配列)を取得するやり方を示します。 2014年4月リリースのBioconductor 2.14以降の推奨手順では、ゲノムのパッケージ(例:BSgenome.Hsapiens.UCSC.hg19)と 対応するアノテーションパッケージ(例:TxDb.Hsapiens.UCSC.hg19.knownGene)の両方を読み込ませる必要がありますので、2015年2月に記述内容を大幅に変更しました。 ヒトなどの主要なパッケージ以外はおそらくデフォルトではインストールされていませんので、「パッケージがインストールされていません」的なエラーが出た場合は、 個別パッケージのインストールを参考にして予め利用したいパッケージのインストールを行ってから再挑戦してください。 出力はmulti-FASTAファイルです。 現状では、ゼブラフィッシュ(danRer7)はゲノムパッケージ(BSgenome.Drerio.UCSC.danRer7) は存在しますが、対応するTxDbパッケージが存在しないので、どこかからGFFファイルを取得してmakeTxDbFromGFF関数などを利用してTxDbオブジェクトを得るなどする必要があります。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. ヒト(hg19)の場合:

ゲノムパッケージ(BSgenome.Hsapiens.UCSC.hg19)と 対応するアノテーションパッケージ(TxDb.Hsapiens.UCSC.hg19.knownGene) を読み込んで、転写開始点上流1000塩基分を取得するやり方です。

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)
param_upstream <- 1000                 #転写開始点上流の塩基配列数を指定

#前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納

library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納

#本番
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- flank(gn, width=param_upstream)#指定した範囲の座標情報を取得
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. ヒト(hg19)の場合:

ゲノムパッケージ(BSgenome.Hsapiens.UCSC.hg19)と 対応するアノテーションパッケージ(TxDb.Hsapiens.UCSC.hg19.knownGene) を読み込んで、転写開始点上流500塩基から下流20塩基までの範囲を取得するやり方です。

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 20                 #転写開始点下流の塩基配列数を指定

#前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納

library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納

#本番
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- promoters(gn, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. 線虫(ce6)の場合:

ゲノムパッケージ(BSgenome.Celegans.UCSC.ce6)と 対応するアノテーションパッケージ(TxDb.Celegans.UCSC.ce6.ensGene) を読み込んで、転写開始点上流500塩基から下流20塩基までの範囲を取得するやり方です。

out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Celegans.UCSC.ce6"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_txdb <- "TxDb.Celegans.UCSC.ce6.ensGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 20                 #転写開始点下流の塩基配列数を指定

#前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納

library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納

#本番
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- promoters(gn, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. マウス(mm10)の場合:

ゲノムパッケージ(BSgenome.Mmusculus.UCSC.mm10)と 対応するアノテーションパッケージ(TxDb.Mmusculus.UCSC.mm10.knownGene) を読み込んで、転写開始点上流500塩基から下流20塩基までの範囲を取得するやり方です。

out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Mmusculus.UCSC.mm10"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_txdb <- "TxDb.Mmusculus.UCSC.mm10.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 20                 #転写開始点下流の塩基配列数を指定

#前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納

library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納

#本番
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- promoters(gn, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. ヒト(hg38)の場合:

ゲノムパッケージ(BSgenome.Hsapiens.NCBI.GRCh38)と 対応するアノテーションパッケージ(TxDb.Hsapiens.UCSC.hg38.knownGene) を読み込んで、転写開始点上流500塩基から下流20塩基までの範囲を取得するやり方として書いてはいますが、 「sequence chr1 not found」のようなエラーが出ます。この理由は、情報提供元が異なるため同一染色体の対応付けができないことに起因します。

out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)
param_txdb <- "TxDb.Hsapiens.UCSC.hg38.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 20                 #転写開始点下流の塩基配列数を指定

#前処理(指定したパッケージ中のオブジェクト名をgenomeおよびtxdbに統一)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納

library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納

#本番
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- promoters(gn, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | プロモーター配列 | GenomicFeatures(Lawrence_2013)

GenomicFeaturesパッケージを主に用いてプロモーター配列(転写開始点近傍配列)を得るやり方を示します。

ここでは、イントロ | 一般 | 配列取得 | ゲノム配列(BSgenomeから)で指定可能なゲノムと イントロ | NGS | アノテーション情報取得 | TxDb | GenomicFeatures(Lawrence_2013)で作成可能なTxDbオブジェクトを入力として、 転写開始点から任意の[上流xxx塩基, 下流yyy塩基]分の塩基配列を取得して、 FASTA形式ファイルで保存するやり方を示しています。makeTxDbFromGFF関数は、どの生物種に対してもデフォルトではChrMのみ環状ゲノムとするようですが、 circ_seqsオプションで任意の染色体の環状・非環状の指定が可能です(高橋 広夫 氏提供情報)。 ちなみに、ゲノムの方の環状・非環状の指定のやり方は、例えば「Chr1, Chr2, Chr3, Chr4, Chr5, ChrM, ChrC」のシロイヌナズナゲノムのオブジェクトgenomeに対して ChrMのみ環状としたい場合は、genome@seqinfo@is_circular <- c(F, F, F, F, F, T, F)のように指定すればよいです。 multi-FASTA形式のゲノム配列ファイルとGFF3形式のアノテーションファイルのみからプロモータ配列を取得するやり方も示しています。 2017年6月23日に、例題12のコードを、コンティグ(配列)数が複数で「FASTAファイルには存在するがGFFファイル中には存在しない配列があった場合」に不都合が生じる問題を回避できるように書き換えました(野間口達洋氏 提供情報)。

1. ヒト("BSgenome.Hsapiens.UCSC.hg19")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のUCSC Genes ("knownGene")のTxDbオブジェクトを利用しています。

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb1 <- "hg19"                  #TxDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param_txdb2 <- "knownGene"             #TxDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
param_upstream <- 200                  #転写開始点上流の塩基配列数を指定
param_downstream <- 30                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromUCSC(genome=param_txdb1, tablename=param_txdb2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#本番(配列取得)
out <- getPromoterSeq(transcriptsBy(txdb, by="gene"),#指定した範囲のプロモーター配列を取得してoutに格納
          genome, upstream=param_upstream, downstream=param_downstream)#指定した範囲のプロモーター配列を取得してoutに格納
out                                    #確認してるだけです

#ファイルに保存
fasta <- unlist(out)                   #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
fasta                                  #確認してるだけです
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. ヒト("BSgenome.Hsapiens.UCSC.hg19")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のEnsembl Genes ("ensGene")のTxDbオブジェクトを利用しています。

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb1 <- "hg19"                  #TxDbオブジェクト作成用のリファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param_txdb2 <- "ensGene"               #TxDbオブジェクト作成用のtable名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
param_upstream <- 200                  #転写開始点上流の塩基配列数を指定
param_downstream <- 30                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromUCSC(genome=param_txdb1, tablename=param_txdb2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#本番(配列取得)
out <- getPromoterSeq(transcriptsBy(txdb, by="gene"),#指定した範囲のプロモーター配列を取得してoutに格納
          genome, upstream=param_upstream, downstream=param_downstream)#指定した範囲のプロモーター配列を取得してoutに格納
out                                    #確認してるだけです

#ファイルに保存
fasta <- unlist(out)                   #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
fasta                                  #確認してるだけです
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTxDbFromGFF関数を用いてTxDbオブジェクトを作成しています。 この関数は、どの生物種に対してもデフォルトではChrMのみ環状ゲノムとするようですので、 circ_seqsオプションで葉緑体ゲノム(Chloroplast; ChrC)が環状であると認識させるやり方です(高橋 広夫 氏提供情報)。 これでゲノムの環状・非環状に起因するエラーを解決できたので第一段階突破です(2015.03.04追加)。 それでも「以下にエラー loadFUN(x, seqname, ranges) : trying to load regions beyond the boundaries of non-circular sequence "Chr3"」 というエラーに遭遇してしまいます。この解決策は4.に記載しています。(2015.08.03追加)

in_f <- "TAIR10_GFF3_genes.gff"        #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Athaliana.TAIR.TAIR9"#ゲノムのパッケージ名を指定
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです
seqinfo(genome)                        #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromGFF(in_f, format="gff3", circ_seqs=c("ChrC","ChrM"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
seqinfo(txdb)                          #確認してるだけです

#本番(配列取得)
out <- getPromoterSeq(transcriptsBy(txdb, by="gene"),#指定した範囲のプロモーター配列を取得してoutに格納
          genome, upstream=param_upstream, downstream=param_downstream)#指定した範囲のプロモーター配列を取得してoutに格納
out                                    #確認してるだけです

#ファイルに保存
fasta <- unlist(out)                   #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
fasta                                  #確認してるだけです
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. シロイヌナズナ("BSgenome.Athaliana.TAIR.TAIR9")の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

3.のエラーへの対処法(甲斐政親氏 提供情報)。取得予定の範囲が完全にゲノム配列内に収まっているもののみ抽出してから getSeq関数を用いて配列取得しています。(2015.08.03追加)

in_f <- "TAIR10_GFF3_genes.gff"        #入力ファイル名を指定してin_fに格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Athaliana.TAIR.TAIR9"#ゲノムのパッケージ名を指定
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです
seqinfo(genome)                        #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromGFF(in_f, format="gff3", circ_seqs=c("ChrC","ChrM"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
seqinfo(txdb)                          #確認してるだけです

#前処理(欲しい領域の座標情報取得)
#gn <- sort(genes(txdb))               #遺伝子の座標情報を取得
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#前処理(取得予定領域座標がゲノム配列の範囲外にあるものをフィルタリング)
hoge3 <- param_upstream + param_downstream#欲しいプロモーター配列長情報をhoge3に格納
obj <- sapply(hoge,                    #領域座標情報hogeに対して下記関数を実行した結果をobjに格納
  function(hoge2) {                    #関数を定義
    start <- hoge2@ranges[[1]][1]      #start位置情報を取得
    end <- hoge2@ranges[[1]][hoge3]    #end位置情報を取得
    chr_num <- grep(paste(hoge2@seqnames@values, "$", sep=""), hoge@seqnames@values)#調査中の領域が属する染色体の要素番号情報を取得
    chr_length <- genome[[chr_num]]@length#該当染色体の配列長情報を取得
    if ((start >= 0) & (end <= chr_length)){#該当染色体の範囲内にある場合は
        return(TRUE)                   #TRUE
    } else {                           #そうでなければ
        return(FALSE)                  #FALSE
    }
  })
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(genome, hoge)          #指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. シロイヌナズナ(TAIR10_chr_all.fas.gz) の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTxDbFromGFF関数を用いてTxDbオブジェクトを作成しています。 イントロ | NGS | 読み込み | FASTA形式 | description行の記述を整形を参考にして、 description行の文字列をgffファイルと対応がとれるように変更しています。 2023年4月に再度実行させると不具合が生じるようになっていることがわかりましたので、「前処理(欲しい領域がゲノム配列の範囲内のもののみ抽出)」の部分を修正しています(2023.04.21追加)。

in_f1 <- "TAIR10_chr_all.fas.gz"       #入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
fasta                                  #確認してるだけです
uge <- strsplit(x = names(fasta), split = " ")#description部分をスペースで分割した結果をugeに格納
names(fasta) <- sapply(uge, `[`, 1)    #ugeの1番目の要素を抽出し、元のdescription部分に代入
fasta                                  #確認してるだけです
writeXStringSet(fasta, file="hogegege.fa", format="fasta", width=50)#fastaの中身を指定したファイル名で保存

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromGFF(in_f2, format="gff3", circ_seqs=c("ChrC","ChrM"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#前処理(欲しい領域がゲノム配列の範囲内のもののみ抽出)
start <- hoge@ranges@start             #欲しい領域のstart情報を取得
end <- start + hoge@ranges@width - 1   #欲しい領域のend情報を取得
chrlen <- unlist(mapply(rep, width(fasta), hoge@seqnames@lengths))#元の転写物上の染色体長情報を取得
obj <- (start >= 0) & (end <= chrlen)  #条件判定(染色体領域内ならTRUE、そうでなければFALSE)
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile("hogegege.fa"), hoge)#指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです
names(fasta) <- names(hoge)            #description情報を追加している

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. ヒト("BSgenome.Hsapiens.NCBI.GRCh38")の[上流200塩基, 下流30塩基]のプロモーター配列を取得する場合:

ヒトゲノム ("hg38"; 2013年12月にリリースされたGenome Reference Consortium GRCh38)です。 現状では、RefSeq Genes ("refGene")を指定するとTxDbオブジェクト作成まではできますがgetPromoterSeq関数実行時にエラーが出ます。 また、Ensembl Genes ("ensGene")を指定するとTxDbオブジェクト作成段階でエラーが出ます...orz

out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#ゲノムのパッケージ名を指定
param2 <- "hg38"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param3 <- "refGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)
param_upstream <- 200                  #転写開始点上流の塩基配列数を指定
param_downstream <- 30                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromUCSC(genome=param2, tablename=param3)#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#本番(配列取得)
out <- getPromoterSeq(transcriptsBy(txdb, by="gene"),#指定した範囲のプロモーター配列を取得してoutに格納
          genome, upstream=param_upstream, downstream=param_downstream)#指定した範囲のプロモーター配列を取得してoutに格納
out                                    #確認してるだけです

#ファイルに保存
fasta <- unlist(out)                   #XStringSetListオブジェクトからXStringSetオブジェクトに変換した結果をfastaに格納
fasta                                  #確認してるだけです
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

7. 乳酸菌ゲノム(Lactobacillus casei 12A)の[上流500塩基, 下流20塩基]のプロモーター配列を取得する場合:

Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus casei 12Aの multi-FASTA形式ゲノム配列ファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa)と GFF3形式のアノテーションファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3) を読み込むやり方です。「前処理(欲しい領域の座標情報取得)」の部分の条件判定は、start部分のみで中途半端ですのでご注意ください(2023.04.21追加)。

in_f1 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge7.fasta"                 #出力ファイル名を指定してout_fに格納
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 20                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み

#前処理(アノテーション情報を取得)
#txdb <- makeTxDbFromGFF(in_f2,#TranscriptDbオブジェクトを取得してtxdbに格納
#          format="gff3", useGenesAsTranscripts=T)#TranscriptDbオブジェクトを取得してtxdbに格納
txdb <- makeTxDbFromGFF(in_f2, format="gff3")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
gn <- sort(genes(txdb))                #遺伝子の座標情報を取得
hoge <- promoters(gn, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです
obj <- (ranges(hoge)@start >= 0)       #条件を満たすかどうかを判定した結果をobjに格納(座標が0よりも小さいものを排除するのが目的)
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #指定した範囲の塩基配列情報を取得
names(fasta) <- names(hoge)            #description情報を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

8. 乳酸菌ゲノム(Lactobacillus casei 12A)の[上流100塩基, 下流0塩基]のプロモーター配列を取得する場合:

7.と基本的に同じですが、少なくとも2015年4月リリースのBioconductor ver. 3.1以降で、 GenomicFeatures パッケージが提供するpromoters関数がTxDbオブジェクトをそのまま読み込めることが判明したので、それを反映させています。

in_f1 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge8.fasta"                 #出力ファイル名を指定してout_fに格納
param_upstream <- 100                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み

#前処理(アノテーション情報を取得)
#txdb <- makeTranscriptDbFromGFF(in_f2,#TranscriptDbオブジェクトを取得してtxdbに格納
#          format="gff3", useGenesAsTranscripts=T)#TranscriptDbオブジェクトを取得してtxdbに格納
txdb <- makeTxDbFromGFF(in_f2, format="gff3")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
#gn <- sort(genes(txdb))               #遺伝子の座標情報を取得
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです
obj <- (ranges(hoge)@start >= 0)       #条件を満たすかどうかを判定した結果をobjに格納(座標が0よりも小さいものを排除するのが目的)
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #指定した範囲の塩基配列情報を取得
names(fasta) <- names(hoge)            #description情報を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

9. 乳酸菌ゲノム(Lactobacillus casei 12A)の[上流100塩基, 下流0塩基]のプロモーター配列を取得する場合:

8.と基本的に同じですが、環状ゲノムの場合はmakeTxDbFromGFF関数実行時にcirc_seqsオプションで該当染色体(or 配列)を指定する必要があります。 ここに記載する文字列は、基本的にゲノムファイルのdescription行部分に記載されているものと同じ(つまり乳酸菌の場合は"Chromosome")である必要があります。 そのため灰色で「前処理(ゲノムファイルのdescription行情報を把握)」

in_f1 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge9.fasta"                 #出力ファイル名を指定してout_fに格納
param_upstream <- 100                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノムファイルのdescription行情報を把握)
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromGFF(in_f2, format="gff3", circ_seqs="Chromosome")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです
obj <- (ranges(hoge)@start >= 0)       #条件を満たすかどうかを判定した結果をobjに格納(座標が0よりも小さいものを排除するのが目的)
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #指定した範囲の塩基配列情報を取得
names(fasta) <- names(hoge)            #description情報を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

10. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

GFF3形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3) とFASTA形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa)を読み込むやり方です。 Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus hokkaidonensis JCM 18461 (Tanizawa et al., 2015) のデータです。

in_f1 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge10.fasta"                #出力ファイル名を指定してout_fに格納
param_upstream <- 100                  #転写開始点上流の塩基配列数を指定
param_downstream <- 10                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"染色体名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"染色体名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

11. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

10.と基本的に同じでparam_upstreamのところを200に変更しているだけですが、エラーが出ることがわかります。 理由は、存在しないゲノム領域からプロモーター配列を取得しようとしたからです。

in_f1 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge11.fasta"                #出力ファイル名を指定してout_fに格納
param_upstream <- 200                  #転写開始点上流の塩基配列数を指定
param_downstream <- 10                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"染色体名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"染色体名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

12. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

11.と基本的に同じですが、取得予定領域座標がゲノム配列の範囲外にあるものをフィルタリングする部分を追加しています(甲斐政親氏 提供情報)。 この例題コードだと問題ないのですが、コンティグ(配列)数が複数で「FASTAファイルには存在するがGFFファイル中には存在しない配列があった場合」に不都合が生じるので、2017年6月23日に "hoge@seqnames@values"だったところを"names(fasta)"に変更しました(野間口達洋 氏提供情報)。

in_f1 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge12.fasta"                #出力ファイル名を指定してout_fに格納
param_upstream <- 200                  #転写開始点上流の塩基配列数を指定
param_downstream <- 10                 #転写開始点下流の塩基配列数を指定

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto", circ_seqs=c("Chromosome"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み

#前処理(欲しい領域の座標情報取得)
hoge <- promoters(txdb, upstream=param_upstream,#指定した範囲の座標情報を取得
           downstream=param_downstream)#指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#前処理(取得予定領域座標がゲノム配列の範囲外にあるものをフィルタリング)
hoge3 <- param_upstream + param_downstream#欲しいプロモーター配列長情報をhoge3に格納
obj <- sapply(hoge,                    #領域座標情報hogeに対して下記関数を実行した結果をobjに格納
  function(hoge2) {                    #関数を定義
    start <- hoge2@ranges[[1]][1]      #start位置情報を取得
    end <- hoge2@ranges[[1]][hoge3]    #end位置情報を取得
    chr_num <- grep(paste(hoge2@seqnames@values, "$", sep=""), names(fasta))#調査中の領域が属する染色体の要素番号情報を取得(2017.06.23変更)
    chr_length <- seqlengths(FaFile(in_f1))[chr_num]#該当染色体の配列長情報を取得
    if ((start >= 0) & (end <= chr_length)){#該当染色体の範囲内にある場合は
        return(TRUE)                   #TRUE
    } else {                           #そうでなければ
        return(FALSE)                  #FALSE
    }
  })
hoge <- hoge[obj]                      #objがTRUEとなる要素のみ抽出した結果をhogeに格納
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"染色体名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"染色体名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | トランスクリプトーム配列 | 公共DBから

基本はNCBI Reference Sequence (RefSeq; Pruitt et al., Nucleic Acids Res., 2014)だと思います。結構頻繁にアップデートされているようです。 RefSeqの"NM_"や"AC_"などの説明についてはこちらをご覧ください。 基本的には、Refseq下記リンク先の、mRNA_Protディレクトリ中の.rna.fna.gzというファイル群でいいと思います。 対応するアミノ酸配列セットを得たい場合には.protein.faa.gzというファイル群になります。

イントロ | 一般 | 配列取得 | トランスクリプトーム配列 | GenomicFeatures(Lawrence_2013)

GenomicFeaturesパッケージを主に用いてトランスクリプトーム配列を得るやり方を示します。 「?extractTranscriptSeqs」を行うことで、様々な例題を見ることができます。transcriptsBy関数部分は、exonsBy, cdsBy, intronsByTranscript, fiveUTRsByTranscript, threeUTRsByTranscript など様々な他の関数で置き換えることができます。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. ヒト(BSgenome.Hsapiens.UCSC.hg19)から取得する場合:

対応するアノテーションパッケージ(TxDb.Hsapiens.UCSC.hg19.knownGene)を利用しています。基本形です。 2015年3月2日の実行結果は82,960 transcriptsでした。

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納
txdb                                   #確認してるだけです

#本番(配列取得)
fasta <- extractTranscriptSeqs(genome, txdb)#転写物塩基配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. ヒト(BSgenome.Hsapiens.UCSC.hg19)から取得する場合:

extractTranscriptSeqsに与えている情報の形式がtxdbからhogeオブジェクトに変わっているだけです。 2015年3月2日現在、transcriptsBy関数実行段階で「いくつかの転写物が複数の染色体上にまたがるexonを持つ。 現状ではこのようなものに対応していない。」的なエラーメッセージが出ます。

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納
txdb                                   #確認してるだけです

#本番(配列取得)
hoge <- transcriptsBy(txdb, by="gene") #geneでグループ化された転写物情報をhogeに格納
fasta <- extractTranscriptSeqs(genome, hoge)#転写物塩基配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. ヒト(BSgenome.Hsapiens.UCSC.hg19)から取得する場合:

2.とほぼ同じですが、transcriptsBy関数実行時のオプションとしてexonを与えています。 非常に計算が大変らしく、メモリ8GBのノートPCではメモリが足りないと文句を言われて実行できません(爆)。

out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納
txdb                                   #確認してるだけです

#本番(配列取得)
hoge <- transcriptsBy(txdb, by="exon") #exonでグループ化された転写物情報をhogeに格納
fasta <- extractTranscriptSeqs(genome, hoge)#転写物塩基配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. ヒト(BSgenome.Hsapiens.UCSC.hg19)から取得する場合:

cdsBy関数をby="gene"オプションで実行するやり方ですが、2.の結果と同じくエラーが出ます。

out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.UCSC.hg19"#ゲノムのパッケージ名を指定
param_txdb <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定(TxDB系のアノテーションパッケージ)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(ゲノム情報を取得)
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納
genome                                 #確認してるだけです

#前処理(アノテーション情報を取得)
library(param_txdb, character.only=T)  #指定したパッケージの読み込み
tmp <- ls(paste("package", param_txdb, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納
txdb                                   #確認してるだけです

#本番(配列取得)
hoge <- cdsBy(txdb, by="gene")         #geneでグループ化されたCDS情報をhogeに格納
fasta <- extractTranscriptSeqs(genome, hoge)#転写物塩基配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

GFF3形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3) とFASTA形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa)を読み込むやり方です。 Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus hokkaidonensis JCM 18461 (Tanizawa et al., 2015) のデータです。

in_f1 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- transcripts(txdb)              #指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"染色体名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"染色体名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

GFF3形式ファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3) とFASTA形式ファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa)を読み込むやり方です。 Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus casei 12Aです。

in_f1 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- transcripts(txdb)              #指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"染色体名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"染色体名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | トランスクリプトーム配列 | biomaRt(Durinck_2009)

biomaRtパッケージ (Durinck et al., Nat Protoc., 2009)を用いて様々なIDに対応する転写物(トランスクリプトーム)配列を取得するやり方を示します。

BioMart (Kasprzyk A., Database, 2011)本体のウェブサービスへのアクセスをR経由で行うもの、という理解でいいです。2022.04.26に多少修正しましたが、まだうまく取得できないですのでご注意ください。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. RefSeq mRNAをキーとしてヒトのcDNA配列を取得したい場合:

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- "refseq_mrna"       #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(IDリスト情報を取得)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
head(hoge)                             #確認してるだけです
dim(hoge)                              #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge[,1], type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

#ファイルに保存
exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
	

2. Ensembl Gene IDをキーとしてヒトのcDNA配列を取得したい場合:

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- "ensembl_gene_id"   #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(IDリスト情報を取得)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
head(hoge)                             #確認してるだけです
dim(hoge)                              #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge[,1], type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

#ファイルに保存
exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
	

3. Ensembl Gene IDをキーとしてヒトのgene_exon_intron配列を取得したい場合:

out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- "ensembl_gene_id"   #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_seqtype <- "gene_exon_intron"    #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(IDリスト情報を取得)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
head(hoge)                             #確認してるだけです
dim(hoge)                              #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge[,1], type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

#ファイルに保存
exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
	

4. RefSeq mRNAをキーとしてラットのcDNA配列を取得したい場合:

out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param_dataset <- "rnorvegicus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- "refseq_mrna"       #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_seqtype <- "cdna"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(IDリスト情報を取得)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
head(hoge)                             #確認してるだけです
dim(hoge)                              #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge[,1], type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

#ファイルに保存
exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
	

5. EMBL (Genbank) IDをキーとしてモルモット(C. porcellus)の5' UTR配列を取得したい場合:

out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param_dataset <- "cporcellus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- "embl"              #配列を取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_seqtype <- "5utr"                #配列のタイプを指定(cdna, peptide, 3utr, 5utr, genomicのいずれかが指定可能です)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(IDリスト情報を取得)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
hoge <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#指定したIDリスト取得結果をhogeに格納
head(hoge)                             #確認してるだけです
dim(hoge)                              #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge[,1], type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

#ファイルに保存
exportFASTA(out, file=out_f)           #outの中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | CDS | GenomicFeatures(Lawrence_2013)

GenomicFeaturesパッケージを主に用いてCDS(タンパク質コード領域の配列)を得るやり方を示します。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

GFF3形式ファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3) とFASTA形式ファイル(Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa)を読み込むやり方です。 Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus casei 12Aです。2,681個の配列が取得できます。

in_f1 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.dna.chromosome.Chromosome.fa"#入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "Lactobacillus_casei_12a.GCA_000309565.2.25.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- cds(txdb)                      #指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"配列名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"配列名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. GFF3形式のアノテーションファイルとFASTA形式のゲノム配列ファイルを読み込む場合:

2019年5月13日の講義で利用した、GFF3形式ファイル(annotation.gff) とFASTA形式ファイル(genome.fna)を読み込むやり方です。 エラーは出ていないものの、GFFファイルをうまく読み込めていないようです。 つまり、txdbのところです。gffをgff3に変えるとか、fnaをfaにするとかそういう問題ではなさそうです。 正解は、(description行部分が異なりますが)cds.fnaです。

in_f1 <- "genome.fna"                  #入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "annotation.gff"              #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Rsamtools)                     #パッケージの読み込み
library(GenomicFeatures)               #パッケージの読み込み
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
txdb <- makeTxDbFromGFF(in_f2, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです

#前処理(欲しい領域の座標情報取得)
hoge <- cds(txdb)                      #指定した範囲の座標情報を取得
hoge                                   #確認してるだけです

#本番(配列取得)
fasta <- getSeq(FaFile(in_f1), hoge)   #配列情報を取得した結果をfastaに格納
fasta                                  #確認してるだけです

#後処理(description部分を変更)
names(fasta) <- paste(seqnames(hoge), start(ranges(hoge)),#"配列名_start_end"に変更
                      end(ranges(hoge)), sep="_")#"配列名_start_end"に変更
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | 一般 | 読み込み | xlsx形式 | openxlsx

openxlsxパッケージを用いて、Microsoft EXCEL (マイクロソフトエクセル)の .xlsxという拡張子のついたファイルを読み込むやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3.xlsx)の場合:

Biological replicatesを模倣したシミュレーションデータ(G1群3サンプル vs. G2群3サンプル)です。 gene_1〜gene_2000までがDEG (最初の1800個がG1群で高発現、残りの200個がG2群で高発現) gene_2001〜gene_10000までがnon-DEGであることが既知です。

in_f <- "data_hypodata_3vs3.xlsx"      #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(openxlsx)                      #パッケージの読み込み

#入力ファイルの読み込み
data <- read.xlsx(in_f, colNames=T, rowNames=T)#in_fで指定したファイルの読み込み
head(data)                             #確認してるだけです
dim(data)                              #確認してるだけです

#ファイルに保存
tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. サンプルデータ13の10,000 genes×6 samplesのカウントデータ(data_hypodata_3vs3_plus.xlsx)の場合:

1.と基本的に同じですが、余分な情報を最初の2行分に含みます。このため、最初の3行目から読み込むやり方です。

in_f <- "data_hypodata_3vs3_plus.xlsx" #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_skip <- 3                        #読み込み始める行番号を指定

#必要なパッケージをロード
library(openxlsx)                      #パッケージの読み込み

#入力ファイルの読み込み
data <- read.xlsx(in_f, startRow=param_skip, colNames=T, rowNames=T)#in_fで指定したファイルの読み込み
head(data)                             #確認してるだけです
dim(data)                              #確認してるだけです

#ファイルに保存
tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

3. Rajkumar et al., 2015の26,119 genes×16 samplesのカウントデータ(s12864-015-1767-y-s1.xlsx)の場合:

Additional file 1として提供されているxlsxファイルです。 2群間比較用(8 samples vs. 8 samples)データです。余分な情報を最初の1行分に含みます。 このため、最初の2行目から読み込むやり方です。

#in_f <- "http://www.biomedcentral.com/content/supplementary/s12864-015-1767-y-s1.xlsx" #入力ファイル名を指定してin_fに格納
in_f <- "s12864-015-1767-y-s1.xlsx"    #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param_skip <- 2                        #読み込み始める行番号を指定

#必要なパッケージをロード
library(openxlsx)                      #パッケージの読み込み

#入力ファイルの読み込み
data <- read.xlsx(in_f, startRow=param_skip, colNames=T, rowNames=T)#in_fで指定したファイルの読み込み
head(data)                             #確認してるだけです
dim(data)                              #確認してるだけです

#ファイルに保存
tmp <- cbind(rownames(data), data)     #保存したい情報をtmpに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | 一般 | ExpressionSet | 1から作成 | Biobase

Biobaseパッケージ中のExpressionSet関数を用いて、 読み込んだ発現行列データをExpressionSet形式にするやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. Blekhman et al., Genome Res., 2010の58,037 genes×6 samplesのカウントデータ(srp001558_count_hoge6.txt)の場合:

「カウント情報取得 | リアルデータ | SRP001558 | recount(Collado-Torres_2017)」 の例題6実行結果ファイルと同じものです。 3 female samples (HSF1-3) vs. 3 male samples (HSM1-3)の2群間比較用データです。

in_f <- "srp001558_count_hoge6.txt"    #入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(Biobase)                       #パッケージの読み込み

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み

#本番(ExpressionSetオブジェクトの作成)
eset <- ExpressionSet(assayData=as.matrix(data))#ExpressionSetオブジェクトの作成
eset                                   #確認してるだけです
	

2. Blekhman et al., Genome Res., 2010の58,037 genes×6 samplesのカウントデータ(srp001558_count_hoge6.txt)の場合:

例題1と基本的に同じですが、phenoData情報のところを追加しています。

in_f <- "srp001558_count_hoge6.txt"    #入力ファイル名を指定してin_fに格納
param_G1 <- 3                          #G1群のサンプル数を指定
param_G2 <- 3                          #G2群のサンプル数を指定

#必要なパッケージをロード
library(Biobase)                       #パッケージの読み込み

#入力ファイルの読み込みとラベル情報の作成
data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み
data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成

#前処理(Phenotypic dataの作成)
labelinfo <- data.frame(gender=as.factor(data.cl))#gender列にクラスラベル情報を格納したlabelinfoオブジェクトを作成
rownames(labelinfo) <- colnames(data)  #labelinfoの行名情報としてcolnames(data)を与える
metadata <- data.frame(labelDescription="nandemoiiyo",#この後使うvarMetadata情報を作成している
                       row.names="gender")#この後使うvarMetadata情報を作成している
phenoData <- new("AnnotatedDataFrame", #AnnotatedDataFrameオブジェクトを作成
                  data=labelinfo,      #AnnotatedDataFrameオブジェクトを作成
                  varMetadata=metadata)#AnnotatedDataFrameオブジェクトを作成
phenoData                              #確認してるだけです
pData(phenoData)                       #確認してるだけです

#本番(ExpressionSetオブジェクトの作成)
eset <- ExpressionSet(assayData=as.matrix(data),#ExpressionSetオブジェクトの作成
                      phenoData=phenoData)#ExpressionSetオブジェクトの作成
eset                                   #確認してるだけです
	

イントロ | 一般 | ExpressionSet | 1から作成 | NOISeq(Tarazona_2015)

NOISeqパッケージ中のreadData関数を用いて、 読み込んだ発現行列データをExpressionSet形式にするやり方を示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. Blekhman et al., Genome Res., 2010の58,037 genes×6 samplesのカウントデータ(srp001558_count_hoge6.txt)の場合:

「カウント情報取得 | リアルデータ | SRP001558 | recount(Collado-Torres_2017)」 の例題6実行結果ファイルと同じものです。 3 female samples (HSF1-3) vs. 3 male samples (HSM1-3)の2群間比較用データです。 「イントロ | 一般 | ExpressionSet | 1から作成 | Biobase」の例題2と同様の結果が得られていることが分かります。

in_f <- "srp001558_count_hoge6.txt"    #入力ファイル名を指定してin_fに格納
param_G1 <- 3                          #G1群のサンプル数を指定
param_G2 <- 3                          #G2群のサンプル数を指定

#必要なパッケージをロード
library(NOISeq)                        #パッケージの読み込み

#入力ファイルの読み込み
data <- read.table(in_f, header=TRUE, row.names=1, sep="\t", quote="")#in_fで指定したファイルの読み込み

#前処理(ExpressionSetオブジェクトの作成; )
data.cl <- c(rep(1, param_G1), rep(2, param_G2))#G1群を1、G2群を2としたベクトルdata.clを作成
myfactors <- data.frame(comp=data.cl)  #サンプルラベル情報をデータフレーム形式に変換
eset <- readData(data=data, factors=myfactors)#ExpressionSetオブジェクトを作成
eset                                   #確認してるだけです
	

イントロ | NGS | 様々なプラットフォーム

NGS機器(プラットフォーム)もいくつかあります:

イントロ | NGS | qPCRやmicroarrayなどとの比較

一言でいえば、3者の再現性は高いようですが、全般的にはRNA-seqのほうがダイナミックレンジが広く特に低発現領域で優れているようです。

NGS(RNA-seq) vs. RT-PCR:

NGS(RNA-seq) vs. マイクロアレイ:

マイクロアレイ vs. RT-PCR:

三者比較:

イントロ | NGS | 可視化(ゲノムブラウザやViewer)

可視化ツールも結構あります。

R用:

R以外(ウェブベースのゲノムブラウザ; server-side):

Review(Wang et al., Brief Bioinform., 2013)によるserver-sideと client-sideの分類分けのうち、server-sideに相当するものたちだと思われます。

R以外(ゲノムブラウザ; client-side):

Review(Wang et al., Brief Bioinform., 2013)によるserver-sideと client-sideの分類分けのうち、client-sideに相当するものたちだと思われます。AJAX-based browsersともいうらしいです。

R以外(stand-alone系):

Review、ガイドライン、パイプライン系:

イントロ | NGS | 配列取得 | FASTQ or SRA | 公共DBから

次世代シーケンサ(NGS)から得られる塩基配列データを公共データベースから取得する際には以下を利用します。 マイクロアレイデータ取得のときと同様、NGSデータもArrayExpress経由でダウンロードするのがいいかもしれません。 メタデータの全貌を把握しやすいこと、生データ(raw data)だけでなく加工済みのデータ(processed data)がある場合にはその存在がすぐにわかることなど、 操作性の点で他を凌駕していると思います。上記でも触れているようにFASTQファイルのダウンロードからマッピングまでを行うのはエンドユーザレベルでは大変ですが、 submitterが提供してくれている場合は(まだまだ少ないようですが)リファレンス配列へのマップ後のデータ、つまりBAM形式ファイルの提供もすでに始まっているようです。 2014年6月26日に知りました(DDBJ児玉さんありがとうございますm(_ _)m)。

データの形式は基本的にSanger typeのFASTQ形式です。 FASTA形式はリードあたり二行(idの行と配列の行)で表現します。 FASTQ形式はリードあたり4行(@から始まるidの行と配列の行、および+から始まるidの行とbase callの際のqualityの行)で表現します。 FASTQ形式は、Sangerのものがデファクトスタンダード(業界標準)です。 かつてIlluminaのプラットフォームから得られるのはFASTQ-like formatという表現がなされていたようです(Cock et al., Nucleic Acids Res., 2010)。 しかし少なくとも2013年頃には、IlluminaデータもBaseSpaceやCASAVA1.8のconfigureBclToFastq.plなどを用いることで業界標準のFASTQ形式(つまりSanger typeのデータ)に切り替えられるようですし、 NCBI SRAなどの公共DBから取得するデータは全てはSanger typeのデータになっていたと思います(Kibukawa E., テクニカルサポートウェビナー, 2013)。

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)

SRAdbパッケージを用いてRNA-seq配列を取得するやり方を示します。 SRA形式ファイルの場合はNCBIからダウンロードしているようですが、FASTQ形式ファイルの場合はEBIからダウンロードしているようです(2014年6月23日、孫建強氏提供情報)。 ここではFASTQファイルをダウンロードするやり方を示します。2015年2月23日までオブジェクトkの中身の一部を取り出して表示させていましたが、 列名などが変わって取り出せなくなっていたのでこの際削除しました。またSRAmetadb.sqliteファイルは現在10GB超になっているようです。(2015年2月24日)。 getFASTQinfoとgetFASTQfile関数の部分にsra_con=sra_conを追加してエラーが出ないようにしました(2019年2月01日)。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. RNA-seqデータ("SRA000299":Marioni et al., Genome Res., 2008)の実験デザインの全体像やファイルサイズを眺める場合:

論文中の記述から腎臓(kidney: SRS000561)と肝臓(liver: SRS000562)サンプルの二群間比較であることがわかったうえで下記情報を眺めるとより理解が深まります。 この2のサンプルはさらに濃度別に2つに分類されています:腎臓3.0pM (SRX000605), 肝臓3.0pM (SRX000571), 腎臓1.5pM (SRX000606), 肝臓1.5pM (SRX000604)。

param <- "SRA000299"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#本番(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示
	

2. ヒトRNA-seqデータ("SRA000299":Marioni et al., Genome Res., 2008)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

計6ファイル、合計7.3Gb程度の容量のファイルがダウンロードされます。東大の有線LANで一時間弱程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。

param <- "SRA000299"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
#getSRAfile(hoge$run, srcType='ftp', fileType='fastq')#こういう記述の仕方でもいいみたいです。
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

3. RNA-seqデータ("SRP017142":Neyret-Kahn et al., Genome Res., 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

論文中の記述からGSE42213を頼りに、 RNA-seqデータがGSE42212として収められていることを見出し、 その情報からSRP017142にたどり着いています。 計6ファイル、合計6Gb程度の容量のファイルがダウンロードされます。東大の有線LANで一時間弱程度かかります。 早く終わらせたい場合は、最後のgetFASTQfile関数のオプションを'ftp'から'fasp'に変更すると時間短縮可能です。

param <- "SRP017142"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

4. シロイヌナズナのRNA-seqデータ("SRP011435":Huang et al., Development, 2012)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

論文中の記述からGSE36469を頼りに、 RNA-seqデータがGSE36469として収められていることを見出し、 その情報からSRP011435にたどり着いています。 計8ファイル、合計10Gb程度の容量のファイルがダウンロードされます。東大の有線LANで2時間程度かかります。

param <- "SRP011435"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

5. ニワトリのRNA-seqデータ("SRP038897":Sharon et al., PLoS One, 2014)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

PacBioのデータです。計xファイル、合計x Gb程度の容量のファイルがダウンロードされます。東大の有線LANでx時間程度かかります。

param <- "SRP038897"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

6. ヒトのRNA-seqデータ("SRP017580":Chan et al., Hum. Mol. Genet., 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

Illumina HiSeq 2000のpaired-endデータです。計6ファイル、合計8 Gb程度の容量のファイルがダウンロードされます。東大の有線LANで2時間程度かかります。

param <- "SRP017580"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

7. カイコのsmall RNA-seqデータ("SRP016842":Nie et al., BMC Genomics, 2013)のgzip圧縮済みのFASTQファイルをダウンロードする場合:

論文中の記述からGSE41841を頼りに、 SRP016842にたどり着いています。 したがって、ここで指定するのは"SRP016842"となります。 以下を実行して得られるsmall RNA-seqファイルは1つ(SRR609266.fastq.gz)で、ファイルサイズは400Mb弱、11928428リードであることがわかります。

param <- "SRP016842"                   #取得したいSRA IDを指定

#必要なパッケージをロード
library(SRAdb)                         #パッケージの読み込み

#前処理
#sqlfile <- "SRAmetadb.sqlite"         #最新でなくてもよく、手元に予めダウンロードしてある"SRAmetadb.sqlite"ファイルをそのまま利用する場合はこちら
sqlfile <- getSRAdbFile()              #最新のSRAmetadb SQLiteファイルをダウンロードして解凍(圧縮状態で700Mbほどありますので注意!)
sra_con <- dbConnect(SQLite(), sqlfile)#おまじない

#前処理(実験デザインの全体像を表示)
hoge <- sraConvert(param, sra_con=sra_con)#paramで指定したSRA IDに付随するstudy (SRP...), sample(SRS...), experiment(SRX...), run(SRR...)のaccession番号情報を取得
hoge                                   #hogeの中身を表示
apply(hoge, 2, unique)                 #hoge行列の列ごとにユニークな文字列を表示させている。
getFASTQinfo(in_acc=hoge$run, sra_con=sra_con)#hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, sra_con=sra_con, srcType='ftp')#hoge$runで指定したSRRから始まるIDのFASTQファイルのダウンロード
	

イントロ | NGS | 配列取得 | シミュレーションデータ | について

NGSのシミュレーションリードデータを作成するプログラムもいくつかあるようです。ここで生成するのは塩基配列データです。 Shcherbina A., BMC Res Notes, 2014のTable 1にin silico read simulatorのまとめがあります。

R用:

R以外:

イントロ | NGS | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成から

イントロ | 一般 | ランダムな塩基配列を生成と同じ手順でリファレンスとなる塩基配列を生成してから、 指定した配列長からなる部分配列を指定したリード数だけランダム抽出してシミュレーションNGSデータを生成するやり方を示します。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. 50塩基の長さのリファレンス配列を生成したのち、20塩基長の部分配列を10リード分だけランダム抽出してFASTA形式で保存したい場合:

塩基の存在比はAが22%, Cが28%, Gが28%, Tが22%にしています。

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param_len_ref <- 50                    #リファレンス配列の長さを指定
narabi <- c("A","C","G","T")           #以下の数値指定時にACGTの並びを間違えないようにするために表示(内部的にも使用してます)
param_composition <- c(22, 28, 28, 22) #(A,C,G,Tの並びで)各塩基の存在比率を指定
param_len_ngs <- 20                    #リード長を指定
param_num_ngs <- 10                    #リード数を指定
param_desc <- "kkk"                    #FASTA形式ファイルのdescription行に記述する内容

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番(リファレンス配列生成)
set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
ACGTset <- rep(narabi, param_composition)#narabi中の塩基がparam_compositionで指定した数だけ存在する文字列ベクトルACGTsetを作成
reference <- paste(sample(ACGTset, param_len_ref, replace=T), collapse="")#ACGTsetからparam_len_ref回分だけ復元抽出して得られた塩基配列をreferenceに格納
reference <- DNAStringSet(reference)   #DNA塩基配列だと認識させるDNAStringSet関数を適用した結果をreferenceに格納
names(reference) <- param_desc         #description行に相当する記述を追加している
reference                              #確認してるだけです

#本番(シミュレーションデータ生成)
s_posi <- sample(1:(param_len_ref-param_len_ngs), param_num_ngs, replace=T)#部分塩基配列抽出時のstart position情報として用いる乱数ベクトルをs_posiに格納
s_posi                                 #確認してるだけです
hoge <- NULL                           #最終的に得る結果を格納するためのプレースホルダhogeを作成しているだけ
for(i in 1:length(s_posi)){            #length(s_posi)回だけループを回す
    hoge <- append(hoge, subseq(reference, start=s_posi[i], width=param_len_ngs))#subseq関数を用いてs_posi[i]からparam_len_ngsで与えた配列長に対応する部分配列をhogeに格納
}
fasta <- hoge                          #hogeの中身をfastaに格納

#後処理(description部分の作成)
description <- paste(param_desc, s_posi, (s_posi+param_len_ngs), sep="_")#param_descやs_posiなどを"_"で結合したものをdescriptionに格納
names(fasta) <- description            #description行に相当する記述を追加している
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | NGS | アノテーション情報取得 | について

アノテーション情報の取り扱いやGFF形式のアノテーションファイルの読み込みなどは下記パッケージで利用可能です。例えば、 genomeIntervals中のreadGff3関数や、 GenomicFeatures中のmakeTxDbFromGFF関数などです。 実用上は、例えばbiomaRtはEnsembl gene IDのgene symbolを取得できるので、 Ensembl gene IDsをgene symbolsに変換するための基礎情報取得目的でも使えます。

イントロ | NGS | アノテーション情報取得 | GFF/GTF形式ファイル

多くの生物種についてEnsembl (Zerbino et al., Nucleic Acids Res., 2018) のFTPサイトから GTF形式(GFF ver. 2) の遺伝子アノテーションファイルを得ることができます。 2017年4月10日現在、上記のFTPサイトへのアクセス時にユーザ名とパスワードを聞かれますが、 「匿名でログオンする」にチェックを入れればOKです。 GTFはGeneral Transfer FormatまたはGene Transfer Formatの略で、GTFの派生版としてGTF2というフォーマットもあるようです。 また、General Feature Format ver. 3 (GFF3)という形式も存在するなど、 GFF/GTF形式として総称されている中で様々なバリエーションがあります。いずれもrefFlat形式同様、どの領域にどの遺伝子があるのかという座標(Coordinates)情報を含みます。 ゲノム配列のバージョンと同じであることを確認した上で用いましょう。

イントロ | NGS | アノテーション情報取得 | refFlat形式ファイル

数多くの生物種についてはUCSCのSequence and Annotation Downloadsから辿っていけばrefFlat形式の遺伝子アノテーションファイルを得ることができます。 このrefFlat形式のアノテーションファイルは、どの領域にどの遺伝子があるのかという座標(Coordinates)情報を含みます。 マイクロアレイ解析に慣れた人への説明としては、NGS(RNA-seqリード)のゲノムマッピング結果から遺伝子発現行列をお手軽に得るために必要なおまじないのファイル、のようなものだと解釈していただければいいと思います。 例として、ヒトとラットのrefFlatファイルを取得する手順を示します。

Humanの場合:

  1. UCSCのSequence and Annotation Downloadsの"Human"をクリック
  2. Annotation databaseをクリック
  3. (アルファベット順に並んでいるので)refFlat.txt.gzをクリック

得られた圧縮ファイルを解凍するとrefFlat.txtが得られます。

Ratの場合:

  1. UCSCのSequence and Annotation Downloadsの"Rat"をクリック
  2. Annotation databaseをクリック
  3. (アルファベット順に並んでいるので)refFlat.txt.gzをクリック

得られた圧縮ファイルを解凍するとRatのrefFlat.txtが得られます。

UCSC以外にもRefSeq, Ensembl, AceViewなどからも似たような情報を取得可能なようです。

イントロ | NGS | アノテーション情報取得 | biomaRt(Durinck_2009)

biomaRtというRパッケージ(Durinck et al., Nat Protoc., 2009)を用いて、 様々な生物種のアノテーション情報を取得するやり方を示します。一般的にはBioMart (Kasprzyk A., Database, 2011)本体のウェブページ上でやるのでしょうが、私はGUIの変遷についていけませんorz...

ここでは、Ensembl Geneにデータセットを固定した状態で様々な生物種のアノテーション情報を取得するやり方を示します。

尚、Ensembl (Flicek et al., 2013)の遺伝子モデル(gene model)はリファレンスゲノムから直接アノテーションされたものであるのに対して、RefSeqはmRNA配列からアノテーションされたものです。 当然、リファレンスゲノムと個々のmRNA配列は異なりますので、RefSeq mRNA配列の一部はリファレンスゲノム配列にマップされません。

「ファイル」−「ディレクトリの変更」でファイルを保存したいディレクトリに移動し以下をコピペ。

1. ラット(Rattus norvegicus; rnorvegicus_gene_ensembl)の場合:

取得する情報を4つ指定しています: (1) "ensembl_gene_id", (2) "ensembl_transcript_id", (3) "affy_rat230_2" (Affymetrix Rat Genome 230 2.0 Array; GPL1355のプローブセットID), (4) "go_id"。

out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param_dataset <- "rnorvegicus_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "ensembl_gene_id",      #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "ensembl_transcript_id",#取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "affy_rat230_2",        #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                    )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(取得可能なアノテーション情報をリストアップ)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ

#本番(アノテーション情報取得)
out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
head(out)                              #確認してるだけです
dim(out)                               #行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

2. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

取得する情報を3つ指定しています: (1) "ensembl_transcript_id", (2) "affy_hg_u133_plus_2" (Affymetrix Human Genome U133 Plus 2.0 Array; GPL570のプローブセットID), (3) "refseq_mrna"。

27万行程度のファイルが得られます。

out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "ensembl_transcript_id",#取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "affy_hg_u133_plus_2",  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "refseq_mrna"           #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                    )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(取得可能なアノテーション情報をリストアップ)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ

#本番(アノテーション情報取得)
out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
head(out)                              #確認してるだけです
dim(out)                               #行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

3. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

56万行程度のファイルが得られます。

out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                    )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(取得可能なアノテーション情報をリストアップ)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ

#本番(アノテーション情報取得)
out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
head(out)                              #確認してるだけです
dim(out)                               #行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

4. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

3.と基本的には同じですが、refseq_mrna IDが存在するもののみフィルタリングした結果を出力しています。 42.6万行程度のファイルが得られます。以下では"with_ox_refseq_mrna"をオプションとして与えていますが、 なぜかlistFilters(mart)でリストアップされているので指定可能なはずの"refseq_mrna"でやるとエラーが出てしまいます。。。

out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                    )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
param_filter <- "with_ox_refseq_mrna"  #フィルタリング条件を指定(「listFilters(mart)」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(取得可能なアノテーション情報をリストアップ)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ

#本番(アノテーション情報取得)
out <- getBM(attributes=param_attribute, filters=param_filter, values=list(TRUE), mart=mart)#アノテーション情報取得結果をhogeに格納
head(out)                              #確認してるだけです
dim(out)                               #行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

5. ヒト(Homo Sapiens; hsapiens_gene_ensembl)の場合:

取得する情報を3つ指定しています: (1) "refseq_mrna", (2) "hgnc_symbol", (3) "go_id"。

4.と同じ結果を得るべく、「refseq_mrna IDが存在するもののみフィルタリング」のところをgetBM関数のfiltersオプション使用以外の手段で行っています。

out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param_dataset <- "hsapiens_gene_ensembl"#データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)
param_attribute <- c(                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "refseq_mrna",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "hgnc_symbol",          #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
               "go_id"                 #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)
                    )                  #取得したい属性名を指定(「listAttributes(mart)」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(biomaRt)                       #パッケージの読み込み

#前処理(取得可能なアノテーション情報をリストアップ)
mart <- useMart("ensembl",dataset=param_dataset)#データベース名("ensembl")とparam_datasetで指定したデータセット名を与えてmartに格納
listAttributes(mart)                   #指定可能な属性名(Attributes)をリストアップ

#本番(アノテーション情報取得)
out <- getBM(attributes=param_attribute, filters="", values="", mart=mart)#アノテーション情報取得結果をhogeに格納
head(out)                              #確認してるだけです
dim(out)                               #行数と列数を表示

#後処理(行列outの1列目の情報が存在するもののみフィルタリング:「out <- subset(out, refseq_mrna != "")」でもよい)
obj <- out[,1] != ""                   #条件を満たすかどうかを判定した結果をobjに格納
out <- out[obj,]                       #objがTRUEとなる行のみ抽出した結果をoutに格納
dim(out)                               #行数と列数を表示

#ファイルに保存
write.table(out, out_f, sep="\t", append=F, quote=F, row.names=F)#outの中身を指定したファイル名で保存
	

イントロ | NGS | アノテーション情報取得 | TxDb | について

アノテーション情報を取り扱うためにRでよく利用されるオブジェクトは、TxDb以外に、RangedData、GRangesListなどなどが挙げられますが、 このウェブページでは、TxDbというオブジェクトをアノテーション情報の基本オブジェクトとし、txdbというオブジェクト名で統一して取り扱っています。 このtxdbに対して、GenomicFeaturesで利用可能な transcripts, exons, cds, genes, promoters, disjointExons, microRNAs, tRNAsなどの関数を適用して、GRanges形式のオブジェクトを得ることができます。 出力情報を制限したい場合には、 transcriptsByOverlaps, exonsByOverlaps, cdsByOverlapsなどの関数が利用可能です。 GRanges形式やGRangesList形式オブジェクトの取り扱いはGenomicRangesに記載されています。

イントロ | NGS | アノテーション情報取得 | TxDb | TxDb.*から

QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TxDb"という形式のオブジェクトを利用する必要があります。TxDbオブジェクトは、makeTxDbFromGFF関数を用いてGTF形式ファイルを入力として作成することも可能ですが、 最も手っ取り早いやり方はTxDbオブジェクト形式で格納されている"TxDb.*"という名前のパッケージを利用することです。 利用可能なTxDb.*パッケージはここにリストアップされているものたちです。

(1)「全パッケージリスト(All Packages)」中の、
  (2)「AnnotationDataの左側のさんかく」、
  (3)「PackageTypeの左側のさんかく」、
  (4)「TxDb」からも辿れます。

ここでは、いくつかのパッケージの読み込みまでを示します。

1. TxDb.Hsapiens.UCSC.hg19.knownGene(ヒト)の場合:

hg19 (Genome Reference Consortium GRCh37のことらしい)です。

param <- "TxDb.Hsapiens.UCSC.hg19.knownGene"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
txdb                                   #確認してるだけです
	

2. TxDb.Rnorvegicus.UCSC.rn5.refGene(ラット)の場合:

2015年2月現在、Rで取得可能なラットの最新版です。

param <- "TxDb.Rnorvegicus.UCSC.rn5.refGene"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
txdb                                   #確認してるだけです
	

3. TxDb.Hsapiens.UCSC.hg38.knownGene(ヒト)の場合:

hg38 (Genome Reference Consortium GRCh38のことらしい)です。

param <- "TxDb.Hsapiens.UCSC.hg38.knownGene"#パッケージ名を指定

#必要なパッケージをロード
library(param, character.only=T)       #paramで指定したパッケージの読み込み

#前処理
#tmp <- unlist(strsplit(param, ".", fixed=TRUE))[2]#paramで指定した文字列からオブジェクト名を取得した結果をtmpに格納
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
txdb <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてtxdbに格納(パッケージ中にはオブジェクトが一つしか存在しないという前提です)
txdb                                   #確認してるだけです
	

イントロ | NGS | アノテーション情報取得 | TxDb | GenomicFeatures(Lawrence_2013)

QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TxDb"という形式のオブジェクトを利用する必要があります。ここでは、GenomicFeatures パッケージを用いてTxDbオブジェクトを得るやり方を示します。

得られるTxDbオブジェクトの元データのバージョンは、当然この項目で作成されたもののほうが新しいです。 したがって、慣れてきたら、予め作成された"TxDb.*"パッケージのものを使うよりもここで直接作成してしまうほうがいいでしょう。 しかし、逆に言えば作成するたびに転写物数("transcript_nrow"のところの数値など)が異なってきますので、"RSQLite version at creation time"のところの情報は気にしたほうがいいでしょう。

1. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

どういうものを取得可能かリストアップしているだけです。

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み
library(rtracklayer)                   #パッケージの読み込み

#前処理(UCSCから取得可能なゲノム情報をリストアップ)
ucscGenomes()                          #ゲノム情報をリストアップ

#前処理(makeTxDbFromUCSC関数で取得可能なtable情報をリストアップ)
supportedUCSCtables()                  #table情報をリストアップ
	

2. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒトゲノム ver. 19 ("hg19"; Genome Reference Consortium GRCh37のことらしい)のUCSC Genes ("knownGene")のTxDbオブジェクトを取得するやり方です。

実質的に、"TxDb.Hsapiens.UCSC.hg19.knownGene"パッケージから取得可能なものと同じ(はず)です。

param1 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "knownGene"                  #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

3. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒトゲノム ver. 19 ("hg19")のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

IDはEntrez Gene IDのままで、配列長情報などがEnsembl Genesのものになるだけのようです。

param1 <- "hg19"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

4. Ensemblから遺伝子アノテーション情報を取得する場合:

ヒト("hsapiens_gene_ensembl")のTxDbオブジェクトを取得するやり方です。

param <- "hsapiens_gene_ensembl"       #データセット名を指定(「listDatasets(useMart("ensembl"))」にリストアップされているものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromBiomart(dataset=param)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

5. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

マウスゲノム ("mm10"; Genome Reference Consortium GRCm38)のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "mm10"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

6. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ラットゲノム ("rn5"; RGSC Rnor_5.0)のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "rn5"                        #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

7. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒツジゲノム ("oviAri3"; ISGC Oar_v3.1)のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "oviAri3"                    #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

8. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ニワトリゲノム ("galGal4"; ICGC Gallus-gallus-4.0)のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "galGal4"                    #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
transcripts(txdb)                      #確認してるだけです
	

9. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒトゲノム("hg38"; Genome Reference Consortium GRCh38のことらしい)のUCSC Genes ("knownGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "hg38"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "knownGene"                  #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

10. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒトゲノム("hg38"; Genome Reference Consortium GRCh38のことらしい)のEnsembl Genes ("ensGene")のTxDbオブジェクトを取得するやり方です。

エラーが出ます。

param1 <- "hg38"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "ensGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

11. UCSC Genome Bioinformaticsから遺伝子アノテーション情報を取得する場合:

ヒトゲノム("hg38"; Genome Reference Consortium GRCh38のことらしい)のRefSeq Genes ("refGene")のTxDbオブジェクトを取得するやり方です。

param1 <- "hg38"                       #リファレンスゲノムを指定(「ucscGenomes()[,"db"]」でリストアップされるものを指定可能)
param2 <- "refGene"                    #table名を指定(「supportedUCSCtables()」でリストアップされるものを指定可能)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理
txdb <- makeTxDbFromUCSC(genome=param1, tablename=param2)#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

イントロ | NGS | アノテーション情報取得 | TxDb | GFF/GTF形式ファイルから

QuasRパッケージを用いてゲノムへのマッピング結果からカウント情報を得たいときに、 "TxDb"という形式のオブジェクトを利用する必要があります。ここでは、GenomicFeatures パッケージを用いて手元にあるGFF/GTF形式ファイルを入力としてTxDbオブジェクトを得るやり方を示します。 基本的にはGenomicFeaturesパッケージ中のmakeTxDbFromGFF関数を用いてGFF/GTF形式ファイルを読み込むことで TxDbオブジェクトをエラーなく読み込むこと自体は簡単にできます。しかし、得られたTxDbオブジェクトとゲノムマッピング結果ファイルを用いてカウント情報を得る場合に、 ゲノム配列提供元とアノテーション情報提供元が異なっているとエラーとなります。具体的には、GFF/GTFファイル中にゲノム配列中にない染色体名があるとエラーが出る場合があります。

1. TAIR(Reiser et al., Curr Protoc Bioinformatics., 2017) から提供されているArabidopsisのGFF3形式ファイル(TAIR10_GFF3_genes.gff)の場合:

基本形です。エラーは出ませんが、2015年3月4日現在、ChrCが環状ではないと認識されてしまっています。

in_f <- "TAIR10_GFF3_genes.gff"        #入力ファイル名を指定してin_fに格納(GFF/GTFファイル)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(in_f)          #txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

2. サンプルデータ23のヒトGTFファイル(human_annotation_sub3.gtf)の場合:

基本形です。2019年4月19日に動作確認した結果、エラーが出て読み込めなくなっているようです。

in_f <- "human_annotation_sub3.gtf"    #入力ファイル名を指定してin_fに格納(GFF/GTFファイル)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(in_f, format="gtf")#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

3. サンプルデータ23のヒトGTFファイル(human_annotation_sub3.gtf)の場合:

うまくいく例です。

in_f1 <- "human_annotation_sub3.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(リファレンス配列の染色体名を抽出)
param <- in_f2                         #paramという名前で取り扱いたいだけです
library(param, character.only=T)       #paramで指定したパッケージの読み込み
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                        length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                      is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
                   chrominfo=chrominfo,#txdbオブジェクトの作成
                species=organism(hoge))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

4. サンプルデータ22のヒトGTFファイル(human_annotation_sub2.gtf)の場合:

うまくいかない例です。

in_f1 <- "human_annotation_sub2.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(リファレンス配列の染色体名を抽出)
param <- in_f2                         #paramという名前で取り扱いたいだけです
library(param, character.only=T)       #paramで指定したパッケージの読み込み
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                        length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                      is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
                   chrominfo=chrominfo,#txdbオブジェクトの作成
                species=organism(hoge))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

5. サンプルデータ21のヒトGTFファイル(human_annotation_sub1.gtf)の場合:

うまくいかない例です。

in_f1 <- "human_annotation_sub1.gtf"   #入力ファイル名を指定してin_f1に格納(GFF/GTFファイル)
in_f2 <- "BSgenome.Hsapiens.UCSC.hg19" #入力ファイル名を指定してin_f2に格納(リファレンス配列)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#前処理(リファレンス配列の染色体名を抽出)
param <- in_f2                         #paramという名前で取り扱いたいだけです
library(param, character.only=T)       #paramで指定したパッケージの読み込み
tmp <- ls(paste("package", param, sep=":"))#paramで指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
hoge <- eval(parse(text=tmp))          #文字列tmpをRオブジェクトとしてhogeに格納
chrominfo <- data.frame(chrom=as.character(seqnames(hoge)),#染色体情報をchrominfoに格納
                        length=as.vector(seqlengths(hoge)),#染色体情報をchrominfoに格納
                      is_circular=hoge@seqinfo@is_circular)#染色体情報をchrominfoに格納

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(file=in_f1, format="gtf",#txdbオブジェクトの作成
            exonRankAttributeName="exon_number",#txdbオブジェクトの作成
            gffGeneIdAttributeName="gene_name",#txdbオブジェクトの作成
            chrominfo=chrominfo,       #txdbオブジェクトの作成
            species=organism(hoge))    #txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

6. ArabidopsisのGFF3形式ファイル(TAIR10_GFF3_genes.gff)の場合:

TAIR(Lamesch et al., 2012) から提供されているものです。 1.と基本的に同じですが、どの生物種に対してもデフォルトではChrMのみ環状ゲノムであるとしてしまうようですので、 circ_seqsオプションでChrCが環状であると認識させるやり方です(高橋 広夫 氏提供情報)。

in_f <- "TAIR10_GFF3_genes.gff"        #入力ファイル名を指定してin_fに格納(GFF/GTFファイル)

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(in_f, format="gff3",#txdbオブジェクトの作成
            circ_seqs=c("ChrC","ChrM"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
seqinfo(txdb)                          #確認してるだけです
	

7. GFF3形式ファイル(Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3)の場合:

Ensembl (Zerbino et al., Nucleic Acids Res., 2018)から提供されている Lactobacillus hokkaidonensis JCM 18461 (Tanizawa et al., 2015) のデータです。

in_f <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(GenomicFeatures)               #パッケージの読み込み

#本番(TxDbオブジェクトの作成)
txdb <- makeTxDbFromGFF(in_f, format="auto")#txdbオブジェクトの作成
txdb                                   #確認してるだけです
	

イントロ | NGS | 読み込み | BSgenome | 基本情報を取得

BSgenomeパッケージを読み込んで、 Total lengthやaverage lengthなどの各種情報取得を行うためのやり方を示します。 パッケージがインストールされていない場合は、インストール | Rパッケージ | 個別 を参考にしてインストールしておく必要があります。 マウスやヒトゲノム解析の場合に「整数オーバーフロー」問題が生じていましたが、Total_lenのところで「sum(width(fasta))」を「sum(as.numeric(width(fasta)))」に、 そしてsortedのところで「rev(sort(width(fasta)))」を「rev(sort(as.numeric(width(fasta))))」などと書き換えることで回避可能であるという情報をいただきましたので、 2015年5月27日にそのように変更しました(野間口達洋 氏提供情報)。

「ファイル」−「ディレクトリの変更」で出力結果ファイルを保存したいディレクトリに移動し以下をコピペ。

1. ヒトゲノム配列パッケージ(BSgenome.Hsapiens.NCBI.GRCh38)の場合:

GC含量は約41%となります。 これは、GとCが各20.5%を占め、残りのAとTが各29.5%を占めることを意味します。

out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Hsapiens.NCBI.GRCh38"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. シロイヌナズナゲノム配列パッケージ(BSgenome.Athaliana.TAIR.TAIR9)の場合:

ゲノムサイズが約120MB、GC含量が約36%であることがわかります。 これは、GとCが各18%を占め、残りのAとTが各32%を占めることを意味します。

out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Athaliana.TAIR.TAIR9"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

3. 線虫ゲノム配列パッケージ(BSgenome.Celegans.UCSC.ce6)の場合:

ゲノムサイズが約100MB、GC含量が約35.4%であることがわかります。 これは、GとCが各17.7%を占め、残りのAとTが各32.3%を占めることを意味します。

out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Celegans.UCSC.ce6"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

4. ゼブラフィッシュゲノム配列パッケージ(BSgenome.Drerio.UCSC.danRer7)の場合:

ゲノムサイズが約1.357GB、GC含量が約36.6%であることがわかります。 これは、GとCが各18.3%を占め、残りのAとTが各31.7%を占めることを意味します。

out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Drerio.UCSC.danRer7"#パッケージ名を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

5. マウスゲノム配列パッケージ(BSgenome.Mmusculus.UCSC.mm10)の場合:

GC含量は約41.667%という値が得られています。 これは、GとCが各20.8335%を占め、残りのAとTが各29.1665%を占めることを意味します。

out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Mmusculus.UCSC.mm10"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

6. 大腸菌ゲノム配列パッケージ(BSgenome.Ecoli.NCBI.20080805)の場合:

GC含量は約50.631%という値が得られています。 これは、GとCが各25.316%を占め、残りのAとTが各24.684%を占めることを意味します。

out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Ecoli.NCBI.20080805"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

7. イヌゲノム配列パッケージ(BSgenome.Cfamiliaris.UCSC.canFam3)の場合:

GC含量は約41.057%という値が得られています。 これは、GとCが各20.528%を占め、残りのAとTが各29.472%を占めることを意味します。

out_f <- "hoge7.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Cfamiliaris.UCSC.canFam3"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

8. ショウジョウバエゲノム配列パッケージ(BSgenome.Dmelanogaster.UCSC.dm2)の場合:

GC含量は約42.21%という値が得られています。 これは、GとCが各21.11%を占め、残りのAとTが各28.89%を占めることを意味します。

out_f <- "hoge8.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Dmelanogaster.UCSC.dm2"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

9. イネゲノム配列パッケージ(BSgenome.Osativa.MSU.MSU7)の場合:

GC含量は約43.57%という値が得られています。 これは、GとCが各21.78%を占め、残りのAとTが各28.22%を占めることを意味します。

out_f <- "hoge9.txt"                   #出力ファイル名を指定してout_fに格納
param_bsgenome <- "BSgenome.Osativa.MSU.MSU7"#パッケージ名を指定(BSgenome系のゲノムパッケージ)

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(param_bsgenome, character.only=T)#指定したパッケージの読み込み

#前処理(指定したパッケージ中のオブジェクト名をgenomeに統一)
tmp <- ls(paste("package", param_bsgenome, sep=":"))#指定したパッケージで利用可能なオブジェクト名を取得した結果をtmpに格納
genome <- eval(parse(text=tmp))        #文字列tmpをRオブジェクトとしてgenomeに格納(パッケージ中にオブジェクトが一つしかないという前提です)
fasta <- getSeq(genome)                #ゲノム塩基配列情報を抽出した結果をfastaに格納
names(fasta) <- seqnames(genome)       #description情報を追加している
fasta                                  #確認してるだけです

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | NGS | 読み込み | FASTA形式 | 基本情報を取得

multi-FASTAファイルを読み込んで、Total lengthやaverage lengthなどの各種情報取得を行うためのやり方を示します。 例題6以降は、ヒトやマウスレベルの巨大ファイルを取り扱うためのコードです。具体的には、 塩基数を整数(integer)ではなく実数(real number)として取り扱うためのas.numeric関数を追加しています。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(基本情報取得)
Total_len <- sum(width(fasta))         #配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

2. 130MB程度のRefSeqのhuman mRNAのmulti-FASTAファイル(h_rna.fasta)の場合:

in_f <- "h_rna.fasta"                  #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(基本情報取得)
Total_len <- sum(width(fasta))         #配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

3. イントロ | 一般 | ランダムな塩基配列を作成の4.を実行して得られたmulti-FASTAファイル(hoge4.fa)の場合:

FASTA形式ファイルの読み込み部分で、Biostringsパッケージ中のreadDNAStringSet関数ではなく、seqinrパッケージ中のread.fasta関数を用いるやり方です。

in_f <- "hoge4.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み
library(seqinr)                        #パッケージの読み込み

#入力ファイルの読み込みとDNAStringSet形式への変換
hoge <- read.fasta(in_f, seqtype="DNA", as.string=TRUE)#in_fで指定したファイルの読み込み
fasta <- DNAStringSet(as.character(hoge))#型変換
names(fasta) <- names(hoge)            #型変換

#本番(基本情報取得)
Total_len <- sum(width(fasta))         #配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

4. 120MB程度のシロイヌナズナゲノムのmulti-FASTAファイル(TAIR10_chr_all.fas.gz)の場合:

in_f <- "TAIR10_chr_all.fas.gz"        #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(基本情報取得)
Total_len <- sum(width(fasta))         #配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

5. Ensembl Genomesから取得した乳酸菌ゲノムのmulti-FASTAファイル(Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa)の場合:

Lactobacillus casei 12A (Taxonomy ID: 1051650)Broadbent et al., BMC Genomics, 2012のゲノム配列です。

Lactobacillus casei 12A - Download DNA sequence - Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa.gzをダウンロード後に解凍すれば、同じファイル名のものが得られます。

in_f <- "Lactobacillus_casei_12a.GCA_000309565.1.22.dna.toplevel.fa"#入力ファイル名を指定してin_fに格納
out_f <- "hoge5.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(基本情報取得)
Total_len <- sum(width(fasta))         #配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(width(fasta)))      #長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(CG)/sum(ACGT)        #トータルのGC含量の情報を取得

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

6. ヒトやマウスレベルのmulti-FASTAファイルの場合:

例題5までのコードは、マウスやヒトゲノム解析の場合に「整数オーバーフロー」問題が生じてうまくいきませんが、それを回避するやり方です。 具体的には、Total_lenのところで「sum(width(fasta))」を「sum(as.numeric(width(fasta)))」に、 そしてsortedのところで「rev(sort(width(fasta)))」を「rev(sort(as.numeric(width(fasta))))」と書き換えています(野間口達洋 氏提供情報)。

in_f <- "hoge9.fa"                     #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.txt"                   #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み

#本番(基本情報取得)
Total_len <- sum(as.numeric(width(fasta)))#配列の「トータルの長さ」を取得
Number_of_contigs <- length(fasta)     #「配列数」を取得
Average_len <- mean(width(fasta))      #配列の「平均長」を取得
Median_len <- median(width(fasta))     #配列の「中央値」を取得
Max_len <- max(width(fasta))           #配列の長さの「最大値」を取得
Min_len <- min(width(fasta))           #配列の長さの「最小値」を取得

#本番(N50情報取得)
sorted <- rev(sort(as.numeric(width(fasta))))#長さ情報を降順にソートした結果をsortedに格納
obj <- (cumsum(sorted) >= Total_len*0.5)#条件を満たすかどうかを判定した結果をobjに格納(長い配列長のものから順番に足していってTotal_lenの50%以上かどうか)
N50 <- sorted[obj][1]                  #objがTRUEとなる1番最初の要素のみ抽出した結果をN50に格納

#本番(GC含量情報取得)
hoge <- alphabetFrequency(fasta)       #A,C,G,T,..の数を配列ごとにカウントした結果をhogeに格納
#CG <- rowSums(hoge[,2:3])             #C,Gの総数を計算してCGに格納(2015年9月12日以前の記述)
#ACGT <- rowSums(hoge[,1:4])           #A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以前の記述)
CG <- apply(as.matrix(hoge[,2:3]), 1, sum)#C,Gの総数を計算してCGに格納(2015年9月12日以降の記述)
ACGT <- apply(as.matrix(hoge[,1:4]), 1, sum)#A,C,G,Tの総数を計算してACGTに格納(2015年9月12日以降の記述)
GC_content <- sum(as.numeric(CG))/sum(as.numeric(ACGT))#トータルのGC含量の情報を取得(2016年4月22日に修正)

#ファイルに保存
tmp <- NULL
tmp <- rbind(tmp, c("Total length (bp)", Total_len))
tmp <- rbind(tmp, c("Number of contigs", Number_of_contigs))
tmp <- rbind(tmp, c("Average length", Average_len))
tmp <- rbind(tmp, c("Median length", Median_len))
tmp <- rbind(tmp, c("Max length", Max_len))
tmp <- rbind(tmp, c("Min length", Min_len))
tmp <- rbind(tmp, c("N50", N50))
tmp <- rbind(tmp, c("GC content", GC_content))
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | NGS | 読み込み | FASTA形式 | description行の記述を整形

multi-FASTAファイルのdescription行の記述はものによってまちまちです。ここでは何種類かのmulti-FASTA形式ファイルに対して、 「目的の記述部分のみ抽出し、それを新たなdescription」とするやり方や、まるごと指定した文字列に置換するやり方などを示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. ラットの上流配列(1000bp)ファイル(rat_upstream_1000.fa)からRefSeq IDの部分のみを抽出したい場合:

抽出例:「NM_022953_up_1000_chr1_268445091_r chr1:268445091-268446090」--> 「NM_022953」

戦略:"_up_"を区切り文字として分割("NM_022953"と"1000_chr1_268445091_r chr1:268445091-268446090")し、分割後の1つ目の要素を抽出

例題ファイルのダウンロード時に、なぜか拡張子の.faが.txtに勝手に変更されていたりする場合がありますのでご注意ください。

in_f <- "rat_upstream_1000.fa"         #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "_up_"                       #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

2. Trinity.fastaから最初のスペースで区切られる前の文字列のみにしたい場合:

抽出例:「comp59_c0_seq1 len=537 ~FPKM=305.1 path=[0:0-536]」--> 「comp59_c0_seq1」

戦略:" "を区切り文字として分割("comp59_c0_seq1", "len=537", "~FPKM=305.1", "path=[0:0-536]")し、分割後の1つ目の要素を抽出

in_f <- "Trinity.fasta"                #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素を抽出してhoge2に格納
names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

3. DHFR.fastaからRefSeq ID部分のみ抽出したい場合:

抽出例:「gi|68303806|ref|NM_000791.3| Homo sapiens dihydrofolate reductase (DHFR), mRNA」--> 「NM_000791.3」

戦略:"|"を区切り文字として分割("gi", "68303806", "ref", "NM_000791.3", " Homo sapiens dihydrofolate reductase (DHFR), mRNA")し、分割後の4番目の要素を抽出

in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "|"                          #区切り文字を指定
param2 <- 4                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがRefSeq IDに相当)を抽出してhoge2に格納
names(fasta) <- hoge2                  #names(fasta)の中身をhoge2で置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. DHFR.fastaからバージョン番号を除いたRefSeq ID部分のみ抽出したい場合:

抽出例:「gi|68303806|ref|NM_000791.3| Homo sapiens dihydrofolate reductase (DHFR), mRNA」--> 「NM_000791」

戦略:"|"を区切り文字として分割("gi", "68303806", "ref", "NM_000791.3", " Homo sapiens dihydrofolate reductase (DHFR), mRNA")し、分割後の4番目の要素を抽出。 次に、"."を区切り文字として分割("NM_000791", "3")し、分割後の1番目の要素を抽出。

in_f <- "DHFR.fasta"                   #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "|"                          #区切り文字を指定
param2 <- 4                            #分割後に抽出したい要素番号を指定
param3 <- "."                          #区切り文字を指定
param4 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがバージョン番号つきのRefSeq IDに相当)を抽出してhoge2に格納
hoge3 <- strsplit(hoge2, param3, fixed=TRUE)#hoge2中の文字列をparam3で区切った結果をリスト形式でhoge3に格納
hoge4 <- unlist(lapply(hoge3, "[[", param4))#hoge3のリスト中の(param4)番目の要素(これがRefSeq IDのバージョン部分以外に相当)を抽出してhoge4に格納
names(fasta) <- hoge4                  #names(fasta)の中身をhoge4で置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

5. sample_100.fastaからバージョン番号を除いたRefSeq ID部分のみ抽出したい場合:

抽出例:「gi|239744030|ref|XR_017086.3| PREDICTED: Homo sapiens supervillin-like (LOC645954), miscRNA」--> 「XR_017086」

戦略:"|"を区切り文字として分割("gi", "239744030", "ref", "XR_017086.3", " PREDICTED: Homo sapiens supervillin-like (LOC645954), miscRNA")し、分割後の4番目の要素を抽出。 次に、"."を区切り文字として分割("XR_017086", "3")し、分割後の1番目の要素を抽出。

in_f <- "sample_100.fasta"             #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "|"                          #区切り文字を指定
param2 <- 4                            #分割後に抽出したい要素番号を指定
param3 <- "."                          #区切り文字を指定
param4 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
hoge <- strsplit(names(fasta), param1, fixed=TRUE)#names(fasta)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
hoge2 <- unlist(lapply(hoge, "[[", param2))#hogeのリスト中の(param2)番目の要素(これがこれがバージョン番号つきのRefSeq IDに相当)を抽出してhoge2に格納
hoge3 <- strsplit(hoge2, param3, fixed=TRUE)#hoge2中の文字列をparam3で区切った結果をリスト形式でhoge3に格納
hoge4 <- unlist(lapply(hoge3, "[[", param4))#hoge3のリスト中の(param4)番目の要素(これがRefSeq IDのバージョン部分以外に相当)を抽出してhoge4に格納
names(fasta) <- hoge4                  #names(fasta)の中身をhoge4で置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

6. シロイヌナズナのゲノム配列ファイル(TAIR10_chr_all.fas.gz; Reiser et al., Curr Protoc Bioinformatics., 2017)のdescription部分をまるまる任意の文字列に置換したい場合:

染色体の並びがparamで指定したものと同じであることが既知という前提です。ゲノム配列ファイル自体は120MB程度あります。

in_f <- "TAIR10_chr_all.fas.gz"        #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
param <- c("Chr1","Chr2","Chr3","Chr4","Chr5","ChrM","ChrC")#置換したい文字列を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fasta")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#本番
names(fasta) <- param                  #names(fasta)の中身をparamで置換
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

イントロ | NGS | 読み込み | FASTQ形式 | 基礎

Sanger FASTQ形式ファイルを読み込むやり方を示します。「基礎」では、FASTQファイルの中身を全て読み込む手順を示します。 入力、出力形式は、ともに非圧縮(.fastq)、gzip圧縮(.fastq.gz)ファイルが可能です。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

quality情報を除く塩基配列情報のみ読み込むやり方です。配列長が同じ場合のみ読み込めます。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです
	

2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

quality情報も読み込むやり方です。配列長が異なっていても読み込めます。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
fastq                                  #確認してるだけです

showClass("ShortReadQ")                #ShortReadQ"というクラスのオブジェクトからどのように情報を取得するかを調べたい場合
sread(fastq)                           #塩基配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示
	

3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

quality情報も読み込むやり方です。配列長が異なっていても読み込めます。 description行の" "以降の文字を削除して、またFASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fastq"                 #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), " ", fixed=TRUE)#id(fasta)中の文字列を" "で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", 1))#hogeのリスト中の一番目の要素のみ取り出してdescriptionに格納

#本番
fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

quality情報も読み込むやり方です。配列長が異なっていても読み込めます。 description行の" "以降の文字を削除して、またFASTQ形式で保存するやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fastq.gz"              #出力ファイル名を指定してout_fに格納

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), " ", fixed=TRUE)#id(fasta)中の文字列を" "で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", 1))#hogeのリスト中の一番目の要素のみ取り出してdescriptionに格納

#本番
fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
	

5. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。 この中から100000リード分をランダムに非復元抽出した結果をgzip圧縮なしで出力しています。 出力ファイルはSRR609266_sub.fastqと同じもの(100000リード; 約16MB)になります。

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.fastq"                 #出力ファイル名を指定してout_fに格納
param <- 100000                        #ランダム抽出したいリード数を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #確認してるだけです(description情報を表示)

#本番
set.seed(1010)                         #おまじない(同じ乱数になるようにするため)
obj <- sample(1:length(fastq), param, replace=F)#リード数の数値の中からparamで指定した数だけ非復元抽出した結果をobjに格納
fastq <- fastq[sort(obj)]              #objで指定したリードのみ抽出した結果をfastqに格納
id(fastq)                              #確認してるだけです(description情報を表示)

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

6. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。この中から最初の100000リード分をgzip圧縮なしで出力しています。

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.fastq"                 #出力ファイル名を指定してout_fに格納
param <- 100000                        #抽出したいリード数を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #確認してるだけです(description情報を表示)

#本番
fastq <- fastq[1:param]                #指定したリード数を抽出した結果をfastqに格納
id(fastq)                              #確認してるだけです(description情報を表示)

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

7. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。 これまでの例題とは毛色が異なり、ただのTipsです。リード数と長さを知りたいときには、fastq.geometry関数が便利です。 「11928428 49」という結果が返されます。リード長が49 bpであることが分かります。

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#本番(リード数とリード長を表示)
fastq.geometry(in_f)                   #リード数とリード長を表示
	

8. FASTQ形式ファイル(SRR616268sub_1.fastq.gz)の場合:

乳酸菌RNA-seqデータSRR616268の最初の100万リード分(約73MB)です。長さは全て107 bpです。 NAを含む場合への各種対応策を2015年6月24日に追加しました(茂木朋貴氏、野間口達洋氏、他多くの受講生提供情報)。

in_f <- "SRR616268sub_1.fastq.gz"      #入力ファイル名を指定してin_fに格納

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#以下はおまけ(部分配列を抽出し出現頻度上位を概観)
hoge <- subseq(fasta, start=1, end=7)  #指定した始点と終点の範囲の配列を抽出
hoge                                   #確認してるだけです
head(table(hoge))                      #出現頻度を順番に表示
head(sort(table(hoge), decreasing=T))  #出現頻度上位を表示
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

hoge <- subseq(fasta, start=3, width=7)#指定した始点から一定範囲の配列を抽出
hoge                                   #確認してるだけです
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

hoge <- subseq(fasta, start=5, width=7)#指定した始点から一定範囲の配列を抽出
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

#以下はおまけ(コツが分かったので、可能なポジションを全て調査)
table(subseq(fasta, start=1, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=2, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=3, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=4, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=5, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=6, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=7, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=8, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=9, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=10, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=11, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=12, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=13, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=14, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=15, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=16, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=17, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=18, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=19, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=20, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=21, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=22, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=23, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=24, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=25, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=26, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=27, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=28, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=29, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=30, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=31, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=32, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=33, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=34, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=35, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=36, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=37, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=38, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=39, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=40, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=41, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=42, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=43, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=44, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=45, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=46, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=47, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=48, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=49, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=50, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=51, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=52, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=53, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=54, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=55, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=56, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=57, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=58, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=59, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=60, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=61, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=62, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=63, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=64, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=65, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=66, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=67, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=68, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=69, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=70, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=71, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=72, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=73, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=74, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=75, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=76, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=77, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=78, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=79, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=80, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=81, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=82, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=83, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=84, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=85, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=86, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=87, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=88, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=89, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=90, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=91, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=92, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=93, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=94, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=95, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=96, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=97, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=98, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=99, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=100, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=101, width=7))["CGGGCCT"]#一気に計算

#以下はおまけ(forループを用いて美しく...初級)
param_kmer <- 7                        #k-merのkの値を指定
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
for(i in 1:101){                       #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=param_kmer))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...中級)
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
for(i in 1:101){                       #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...上級1)
param_len_ngs <- 107                   #リード長を指定
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
hoge <- param_len_ngs - nchar(param_obj) + 1#positionの右端の値を計算してhogeに格納
for(i in 1:hoge){                      #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...上級2)
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
hoge <- width(fasta)[1] - nchar(param_obj) + 1#positionの右端の値を計算してhogeに格納
for(i in 1:hoge){                      #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")
	

9. FASTQ形式ファイル(SRR616268sub_1.fastq.gz)の場合:

乳酸菌RNA-seqデータSRR616268の最初の100万リード分(約73MB)です。長さは全て107 bpです。 NAを含む場合への各種対応策を2015年6月24日に追加しました(茂木朋貴氏、野間口達洋氏、他多くの受講生提供情報)。 8.と基本的に同じですが、入力ファイルの12%分(120,000リード)のみで解析するとFastQC実行結果と同じになることがわかったので、そのサブセットのみで再解析しています。/p>

in_f <- "SRR616268sub_1.fastq.gz"      #入力ファイル名を指定してin_fに格納
param <- 120000                        #抽出したいリード数を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fastq")#in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#前処理(サブセットの抽出)
fasta <- fasta[1:param]                #サブセット抽出結果をfastaに格納
fasta                                  #確認してるだけです

#以下はおまけ(部分配列を抽出し出現頻度上位を概観)
hoge <- subseq(fasta, start=1, end=7)  #指定した始点と終点の範囲の配列を抽出
hoge                                   #確認してるだけです
head(table(hoge))                      #出現頻度を順番に表示
head(sort(table(hoge), decreasing=T))  #出現頻度上位を表示
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

hoge <- subseq(fasta, start=3, width=7)#指定した始点から一定範囲の配列を抽出
hoge                                   #確認してるだけです
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

hoge <- subseq(fasta, start=5, width=7)#指定した始点から一定範囲の配列を抽出
table(hoge)["CGGGCCT"]                 #CGGGCCTの出現頻度を表示

#以下はおまけ(コツが分かったので、可能なポジションを全て調査)
table(subseq(fasta, start=1, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=2, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=3, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=4, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=5, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=6, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=7, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=8, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=9, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=10, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=11, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=12, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=13, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=14, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=15, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=16, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=17, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=18, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=19, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=20, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=21, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=22, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=23, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=24, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=25, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=26, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=27, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=28, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=29, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=30, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=31, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=32, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=33, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=34, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=35, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=36, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=37, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=38, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=39, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=40, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=41, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=42, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=43, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=44, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=45, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=46, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=47, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=48, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=49, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=50, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=51, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=52, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=53, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=54, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=55, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=56, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=57, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=58, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=59, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=60, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=61, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=62, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=63, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=64, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=65, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=66, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=67, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=68, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=69, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=70, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=71, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=72, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=73, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=74, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=75, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=76, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=77, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=78, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=79, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=80, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=81, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=82, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=83, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=84, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=85, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=86, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=87, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=88, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=89, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=90, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=91, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=92, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=93, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=94, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=95, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=96, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=97, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=98, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=99, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=100, width=7))["CGGGCCT"]#一気に計算
table(subseq(fasta, start=101, width=7))["CGGGCCT"]#一気に計算

#以下はおまけ(forループを用いて美しく...初級)
param_kmer <- 7                        #k-merのkの値を指定
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
for(i in 1:101){                       #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=param_kmer))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...中級)
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
for(i in 1:101){                       #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...上級1)
param_len_ngs <- 107                   #リード長を指定
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
hoge <- param_len_ngs - nchar(param_obj) + 1#positionの右端の値を計算してhogeに格納
for(i in 1:hoge){                      #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")

#以下はおまけ(forループを用いて美しく...上級2)
param_obj <- "CGGGCCT"                 #調べたいk-merを指定
Obs <- NULL                            #おまじない
hoge <- width(fasta)[1] - nchar(param_obj) + 1#positionの右端の値を計算してhogeに格納
for(i in 1:hoge){                      #ループを回す
    Obs <- c(Obs, table(subseq(fasta, start=i, width=nchar(param_obj)))[param_obj])#出現回数算出結果を格納
}
Obs[is.na(Obs)] <- 0                   #NAの位置に0を代入
head(Obs)                              #最初の6個の要素を表示
mean(Obs, na.rm=TRUE)                  #平均値
Exp <- mean(Obs, na.rm=TRUE)           #平均値をExpとして取り扱う
head(Obs/Exp)
plot(Obs/Exp, type="l", col="red")
	

イントロ | NGS | 読み込み | FASTQ形式 | 応用

FASTQ形式ファイルを読み込むやり方を示します。ファイルサイズが数GBというレベルになってきてますので、 圧縮ファイルでの読み込みが基本となりつつあります。 しかし、一度に圧縮ファイル中の中身を一旦全て読み込むことも厳しい、あるいはもはやできない状態になってきています。 この背景を踏まえ、「応用」では、圧縮FASTQファイルを入力として、メモリオーバーフロー(スタックオーバーフロー;stack overflow) にならないように一部だけを読み込む手順を示します。まだ途中段階ですが、野間口達洋 氏提供情報をもとにいくつか試しています。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)の7を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013)です。 入力ファイルサイズは400Mb弱、11,928,428リードです。この中から最初の100000リード分をgzip圧縮ファイルとして出力しています。

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fasta.gz"              #出力ファイル名を指定してout_fに格納
param <- 100000                        #抽出したいリード数を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fasta <- readDNAStringSet(in_f, format="fastq",#in_fで指定したファイルの読み込み
            skip=0, nrec=param)        #in_fで指定したファイルの読み込み
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f,     #fastaの中身を指定したファイル名で保存
    format="fasta", compress=T, width=50)#fastaの中身を指定したファイル名で保存
	

2. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

イントロ | NGS | 配列取得 | FASTQ or SRA | SRAdb(Zhu_2013)の7を実行して得られた 2015年6月18日現在(R ver. 3.2.0; Biostrings ver. 2.36.1)、エラーを吐かずにFASTQ形式のgzip圧縮ファイルは得られるのですが、、、 クオリティスコア部分が変です。つまり、このやり方はダメです。 おそらくreadDNAStringSet関数で読み込んだ情報の中にクオリティスコアが含まれていないため、 ダミーの「;」というスコアがそのまま表示されているだけだと思います。 readDNAStringSet関数でクオリティスコアを読み込むやり方(あるいは取り出し方)が分かった方は教えて下さいm(_ _)m

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fastq.gz"              #出力ファイル名を指定してout_fに格納
param <- 100000                        #抽出したいリード数を指定

#必要なパッケージをロード
library(Biostrings)                    #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readDNAStringSet(in_f, format="fastq",#in_fで指定したファイルの読み込み
            skip=0, nrec=param)        #in_fで指定したファイルの読み込み
fastq                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fastq, file=out_f,     #fastqの中身を指定したファイル名で保存
    format="fastq", compress=T)        #fastqの中身を指定したファイル名で保存
	

3. small RNA-seqのgzip圧縮FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

原始的なやり方ですが、とりあえずうまく動きます。

in_f <- "SRR609266.fastq.gz"           #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fastq"                 #出力ファイル名を指定してout_fに格納
param <- 100000                        #抽出したいリード数を指定

#入力ファイルの読み込み
fastq <- readLines(in_f, n=param*4)    #in_fで指定したファイルの読み込み

#ファイルに保存
writeLines(fastq, con=out_f)           #fastqの中身を指定したファイル名で保存
	

イントロ | NGS | 読み込み | FASTQ形式 | description行の記述を整形

FASTQ形式ファイルに対して、 「目的の記述部分のみ抽出し、それを新たなdescription」としてFASTQ形式で保存するやり方などを示します。

「ファイル」−「ディレクトリの変更」で解析したいファイルを置いてあるディレクトリに移動し以下をコピペ。

1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

writeFastq関数実行時にcompress=Fとして非圧縮FASTQ形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge1.fastq"                 #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納

#本番
fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

2. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

writeFastq関数実行時にcompress=Tとしてgzip圧縮FASTQ形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge2.fastq.gz"              #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納

#本番
fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=T)   #fastqの中身を指定したファイル名で保存
	

3. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

writeXStringSet関数実行時にcompress=Fとして非圧縮FASTA形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge3.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納

#本番
fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
names(fasta) <- description            #description情報部分をfastaに追加
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", width=50)#fastaの中身を指定したファイル名で保存
	

4. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出

writeXStringSet関数実行時にcompress=Tとしてgzip圧縮FASTA形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge4.fasta.gz"              #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
id(fastq)                              #description情報を表示

#前処理
hoge <- strsplit(as.character(id(fastq)), param1, fixed=TRUE)#id(fastq)中の文字列をparam1で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param2))#hogeのリスト中の(param2)番目の要素のみ取り出してdescriptionに格納

#本番
fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
names(fasta) <- description            #description情報部分をfastaに追加
fasta                                  #確認してるだけです

#ファイルに保存
writeXStringSet(fasta, file=out_f, format="fasta", compress=T, width=50)#fastaの中身を指定したファイル名で保存
	

5. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

抽出例:「SRR037439.1 HWI-E4_6_30ACL:2:1:0:176 length=35」-->「SRR037439.1」

戦略:description行の" "を区切り文字として分割("SRR037439.1"と"HWI-E4_6_30ACL:2:1:0:176"と"length=35")し、分割後の1つ目の要素を抽出。 次に、"."を区切り文字として分割("SRR037439"と"1")し、分割後の2つ目の要素を抽出

writeFastq関数実行時にcompress=Fとして非圧縮FASTQ形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge5.fastq"                 #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定
param3 <- "."                          #区切り文字を指定
param4 <- 2                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
library(ShortRead)                     #パッケージの読み込み

#入力ファイルの読み込み
fastq <- readFastq(in_f)