(Rで)塩基配列解析 (last modified 2018/12/03, since 2010)

このウェブページのR関連部分は、インストール | についての推奨手順 (Windows2018.11.15版Macintosh2018.11.27版)に従って フリーソフトRと必要なパッケージをインストール済みであるという前提で記述しています。 初心者の方は基本的な利用法(Windows2015.04.03版Macintosh2015.04.03版)で自習してください。 2018年7月に(Rで)塩基配列解析の一部(講習会・書籍・学会誌など)を切り分けてサブページに移行しました。(2018/07/18)

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

はじめに

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

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

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

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

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

過去のお知らせ

  • 「インストール | Rパッケージ | 必要最小限プラスアルファ」を更新しました。(2018/11/13)
  • 「インストール | Rパッケージ | 個別(2018年11月以降)」を変更しました。(2018/11/12)
  • 永らく「削除予定」としていた項目(「Rのインストールと起動」、「個別パッケージのインストール」、「NOISeq(Tarazona_2011)」、「NBPSeq(Di_2011)」)を本当に削除しました。(2018/11/12)
  • サブページに移行した項目を削除しました。(2018/11/12)
  • 平成29年度のNGSハンズオン講習会でもお世話になった「先進ゲノム支援」による中級者向けの 情報解析講習会が2018年11月19-21日に開催されます。10/16締切です。(2018/09/20)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 応用 | TCC正規化(Sun_2013)+EBSeq(Leng_2013)」中の一部のコードが間違っていたので修正しました。(長部 高之 氏提供情報)(2018/08/12)
  • 項目名「解析 | フィルタリング | について 」を「解析 | 前処理 | について 」に変更しました。
  • 書ききれませんが、いろいろと追加や変更を行っています。(2018/08/08)
  • 項目名「イントロ | 型変換 | ...」を「解析 | 前処理 | 型変換 | ...」に変更しました。(2018/08/06)
  • 項目名「解析 | フィルタリング | について 」を「解析 | 前処理 | について 」に変更しました。 このあたりは、今後の情報増加に伴って、多少項目名を随時再編する予定です。(2018/08/06)
  • 前処理 | フィルタリング | について 」を追加しました。(2018/08/06)
  • 「解析 | クラスタリング | サンプル間 | TCC(Sun_2013)」の例題10の入力ファイルリンク切れを修正しました。(2018/08/06)
  • 「カウント情報取得 | リアルデータ | SRP001540 | recount(Collado-Torres_2017)」を更新しました。(2018/08/06)
  • 「イントロ | 型変換 | について」を追加しました。(2018/08/02)
  • 「イントロ | 型変換 | ExpressionSet --> SummarizedExperiment」を追加しました。(2018/08/02)
  • 「イントロ | 型変換 | ExpressionSet --> RangedSummarizedExperiment」を追加しました。(2018/08/02)
  • 「イントロ | 型変換 | RangedSummarizedExperiment --> ExpressionSet」を追加しました。(2018/08/02)
  • 「カウント情報取得 | リアルデータ | ...」のところで、これまでRangedSummrizedExperimentオブジェクトをhogeとして取り扱ってきましたが、rseに変更しました。(2018/08/02)
  • 「イントロ | 一般 | ExpressionSet | 1から作成 | NOISeq(Tarazona_2015)」を追加しました。(2018/08/02)
  • 「イントロ | 一般 | ExpressionSet | 1から作成 | Biobase」を追加しました。(2018/08/01)
  • 「カウント情報取得 | リアルデータ | SRP001540 | recount(Collado-Torres_2017)」を更新しました。例題4と5はその後の解析がやりやすいようにしています。(2018/07/31)
  • 「カウント情報取得 | シミュレーションデータ | Biological rep. | 2群間 | 基礎 | LPEseq(Gim_2016)」のエラーが解消されました。(2018/07/31)
  • 「解析 | 発現変動 | 2群間 | 対応なし | 複製なし | NOISeq(Tarazona_2015)」を追加しました。(2018/07/29)
  • 「インストール | Rパッケージ | 必要最小限プラスアルファ(数GB?!)」を更新しました。(2018/07/29)
  • 「カウント情報取得 | シミュレーションデータ | Biological rep. | 2群間 | 基礎 | LPEseq(Gim_2016)」を追加しました。今のところまだエラーが出ます。(2018/07/28)
  • 「解析 | 発現変動 | 2群間 | 対応なし | 複製なし | LPEseq(Gim_2016)」を追加しました。(2018/07/27)
  • 「カウント情報取得 | シミュレーションデータ | ...」のあたりを追加しました。(2018/07/22)
  • 解析 | 発現変動 | 2群間 | 対応なし | 複製なし | について」を追加しました。(2018/07/18)
  • 「解析 | 発現変動 | 2群間 | 対応なし | 複製なし | edgeR(Robinson_2010)」を更新しました。(2018/07/18)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 基礎 | baySeq(Hardcastle_2010)」を更新しました。(2018/07/10)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 基礎 | EBSeq(Leng_2013)」を更新しました。(2018/07/09)
  • R version 3.5.1とversion 3.4.3でEBSeqパッケージを利用すべくlibrary(EBSeq)をしたら、 内部的に利用するblockmodelingというパッケージのCITATIONが原因でロードできないエラーに遭遇しました。 対処法はblockmodelingパッケージのフォルダ中にあるCITATIONというファイルの削除(私はこれでEBSeqをロードできるようになった)です。 blockmodelingフォルダのインストールされている場所がわからないヒトは、Windows2018.03.12版のスライド5などを参考にしてください。(2018/07/08)
  • 解析 | ChIP-seq | について」を更新しました。(2018/07/06)
  • 解析 | 機能解析 | GMTファイル取得 | について」を更新しました。(2018/07/06)
  • 「カウント情報取得 | リアルデータ | SRP001540 | GSVAdata(Hänzelmann_2013)」を更新しました。(2018/07/03)
  • 「解析 | 一般 | Sequence logos | ggseqlogo(Wagih_2017)」を(とりあえず項目のみ)追加しました。(2018/06/29)
  • 「解析 | 一般 | Sequence logos | seqLogo」に項目名を変更しました。(2018/06/29)
  • 解析 | 一般 | Sequence logos | について」を追加しました。(2018/06/29)
  • イントロ | NGS | アノテーション情報取得 | について」を更新しました。(2018/06/29)
  • 解析 | 機能解析 | GMTファイル取得 | について」を追加しました。(2018/06/27)
  • 「解析 | 機能解析 | GMTファイル取得 | EGSEAdata(Alhamdoosh_2017)」を追加しました。(2018/06/27)
  • 「解析 | 機能解析 | GMTファイル取得 | GeneSetDB(Araki_2012)」を追加しました。(2018/06/27)
  • 解析 | クラスタリング | について」を更新しました。(2018/06/27)
  • 解析 | 発現変動 | 時系列 | について」を更新しました。(2018/06/27)
  • 解析 | 分類 | について」を追加しました。(2018/06/27)
  • 「解析 | 機能解析 | パスウェイ(Pathway)解析 | GSVA(Hänzelmann_2013)」を追加しました。(2018/06/26)
  • 「解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | GSVA(Hänzelmann_2013)」を追加しました。(2018/06/26)
  • 「解析 | 機能解析 | 遺伝子セット解析 | GSVA(Hänzelmann_2013)」を更新しました。(2018/06/26)
  • 「解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | SeqGSEA(Wang_2014)」の記載事項を少し変更しました。 具体的には、MSigDBからのgmtファイル取得に関する別項目を新たに作成したので、この中に記載していた該当部分を大幅に削りました。(2018/06/25)
  • 「解析 | 機能解析 | GMTファイル読込 | GSEABase(Morgan_2018)」を追加しました。(2018/06/25)
  • 「解析 | 機能解析 | GMTファイル取得 | MSigDB(Subramanian_2005)」を追加しました。(2018/06/25)
  • 解析 | 機能解析 | について」を追加しました。GSEA周辺の歴史や考え方、 そしてどのようにして必要な情報を取得し解析するかについて、全貌をざっくりと書いてあります。(2018/06/25)
  • 「カウント情報取得 | リアルデータ | SRP001540 | GSVAdata(Hänzelmann_2013)」を追加しました。(2018/06/22)
  • 「カウント情報取得 | リアルデータ | SRP001540 | recount(Collado-Torres_2017)」を追加しました。(2018/06/22)
  • 「インストール | Rパッケージ | 必要最小限プラスアルファ(数GB?!)」を更新しました。(2018/06/22)
  • 解析 | 機能解析 | 遺伝子オントロジー(GO)解析 | について」を更新しました。(2018/06/22)
  • 解析 | 機能解析 | パスウェイ(Pathway)解析 | について」を更新しました。(2018/06/22)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 応用 | Blekhmanデータ | TCC(Sun_2013)」を追加しました。(2018/06/18)
  • 「解析 | 発現変動 | 2群間 | 対応なし | 複製なし | TCC(Sun_2013)」の項目を追加しました。(2018/06/17)
  • 以下の2つの項目は、Rパッケージrecountを用いて ウェブサイトrecount2にアクセスしてカウント情報を含む RangedSummarizedExperimentクラスオブジェクトという形式の.Rdataをダウンロードして、各種カウントデータを抽出したりするやり方を示しています。 メタデータが公共DBに依存しており一筋縄ではいきませんので、ERP000546とSRP001558のやり方を見比べて一通りの例題をこなして経験を積んでおくことを強く推奨します。 私はまだrecount2の原著論文を読んではおりませんが、提供されている生物種はおそらくヒトのみです。 それでもなお、統一的な手順で得られたカウントデータを提供してくれてますので、様々なデータセットを直接比較できるというadvantageは非常に大きいと思います。(2018/06/10)
  • 「カウント情報取得 | リアルデータ | ERP000546 | recount(Collado-Torres_2017)」を追加しました。(2018/06/10)
  • 「カウント情報取得 | リアルデータ | SRP001558 | recount(Collado-Torres_2017)」を追加しました。(2018/06/10)
  • カウント情報取得 | について」を追加しました。(2018/06/10)
  • 「マップ後 | カウント情報取得 | single-end | ゲノム | アノテーション有 | HTSeq(Anders_2015)」の中身を変更しました。(2018/06/06)
  • 「マップ後 | カウント情報取得 | single-end | ゲノム | アノテーション有 | HTSeq(Anders_2015)」を追加しました。(2018/05/30)
  • 「イントロ | ファイル形式の変換 | GFF3 --> GTF」を追加しました。(2018/05/30)
  • H29年度NGSハンズオン講習会」の報告書が公開されました。(2018/05/17)
  • Silhouetteスコアの新たな使い道提唱論文(Zhao et al., Biol. Proc. Online, 2018) の使い方を「解析 | 一般 | Silhouette scores(シルエットスコア)」に示しました。(2018/03/01)
  • Silhouetteスコアの新たな使い道提唱論文(Zhao et al., Biol. Proc. Online, 2018)がpublishされました。(2018/03/01)
  • アグリバイオインフォマティクス教育研究プログラムでは、平成30年度もバイオインフォ関連講義を行います。 例年東大以外の企業の方、研究員、大学院生が2-3割程度受講しております。受講ガイダンスは、平成30年4月4日17:15より東大農学部2号館2階化学第一講義室で開催します。(2018/03/08)
  • 「作図 | M-A plot | 基礎 | 2. 発現変動遺伝子を色分けする」の例題5で示しているように、 TCCの推奨手順(内部的にDESeq2を利用)で複製なしデータの発現変動解析を行ったときに、 明らかにおかしな結果になる場合があることが判明しましたのでお知らせします(南茂隆生 氏提供情報)。 私がこれまで動作確認用で用いてきた複製なしデータ(data_hypodata_1vs1.txt)ではうまくいっていたので、 今まで全くこの問題に気づきませんでした。私どもを信頼してTCCを利用して頂いていた皆さま、大変申し訳ありませんでしたm(_ _)m もう少し詳細な内容については例題5のところにも記載しております。 もしM-A plotで眺めて「明らかに変」な結果に遭遇した方が他にいらっしゃいましたら、ご連絡いただければ幸いです。 尚、当面の対策としては、とりあえずは現状の推奨手順でやっていただいて、M-A plotが変じゃなければそのままでよいと思います。 もし変な結果が得られれば、内部的にDESeq2ではなくDESeqを用いるTCCの利用で満足のいく結果が得られるものと期待されます。 大変貴重な情報をお寄せいただいた南茂隆生 氏、およびDESeq2開発者とのやりとりや現象の把握に尽力してくださった孫建強 氏に感謝申し上げますm(_ _)m。 尚、私の動作環境はWindows, R ver. 3.3.3, TCC ver. 1.14.0, DESeq2 ver. 1.14.1です。(2018/01/12)
  • 「作図 | M-A plot...」のあたりが2012年頃の古い記述のままになっていたので更新しました。(2018/01/11)
  • サンプルデータ」を更新しました。例題45と46です(孫建強氏 提供情報)。 ついでに例題44のrecount2の論文 (Collado-Torres et al., Nat Biotechnol., 2017)情報を更新しました。(2018/01/11)

  •  

  • Dr. Bonoの生命科学データ解析 というバイオインフォマティクス初学者向けの本が出版されています。この教科書を読めばバイオインフォの基礎知識や基本的な考え方などを体系的に学べます。 NGSハンズオン講習会で専門用語などについていけなかったヒトは、この教科書で基礎知識を補っておくとよいと思います。(2017/10/06)
  • 「参考資料 | 講習会、講義、講演資料」を更新しました。(2017/09/07)
  • R (ver. 3.4.1; 2017年5月以降ごろから使えるやつ)のTCCパッケージ利用時 に、Macユーザの方がエラーが出るようです。対策は、「R ver. 3.3.3などちょっと古いバージョンのものを使う」です。 原因はTCC内部で利用しているsamrパッケージにバグが含まれており(2017年7月31日現在)、 これをインストールできないからです。お気を付けください(マックユーザ2名からの提供情報)。(2017/07/31)
  • イントロ | 一般 | 配列取得 | プロモーター配列 | GenomicFeatures(Lawrence_2013)」の例題12で、 コンティグ(配列)数が複数で「FASTAファイルには存在するがGFFファイル中には存在しない配列があった場合」に不都合が生じる問題を回避できるコードに書き換えました(野間口達洋氏 提供情報)。(2017/06/23)
  • 解析 | 菌叢解析 | についてをアップデートしました。(2017/06/04)
  • Galaxyのウェブサイトのリンク先をhttp://usegalaxy.org/からhttps://galaxyproject.org/に変更しました。(2017/03/17)
  • 私の所属するアグリバイオインフォマティクス教育研究プログラムでは、平成29年度もバイオインフォ関連講義を行います。 例年東大以外の企業の方、研究員、大学院生が2-3割程度受講しております。受講ガイダンスは4月5日17:15- 於東大農です。 例年アグリバイオ所有ノートPCは台数が絶対的に足りないので、特に外部の受講希望者はできるだけ基本的に3時間以上バッテリーがもつノートPCを用意して臨んで下さい。(2017/02/20)

  •  

  • 「解析 | 一般 | アラインメント | ...」周辺の項目名を整理しました。(2016/12/29)
  • 2016年10月5-6日に東京大学弥生講堂一条ホールにてトーゴーの日シンポジウム2016 が開催されます。主催はNBDC!。NGSハンズオン講習会では裏方に徹して事前準備から後片付けまで大変お世話になりましたm(_ _)m。 講習会受講者アンケートで書かれていた希望や要望の一部はポスター発表者への質問で解決するかもしれません。 興味ある方は是非ご参加ください。(2016/09/30)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製なし | DESeq2(Love_2014)」を作成しました。(2016/06/01)
  • 「解析 | クラスタリング | 遺伝子間(応用) | TCC正規化(Sun_2013)+MBCluster.Seq(Si_2014)」 のリンク先が切れていたのを修正しました。コードも若干変更しました。(2016/05/30)
  • これまでずっと放置していた「FDR < 閾値」という変な表現を、やっと「FDR = 閾値 (q-value < 閾値)」に修正しはじめました。 該当箇所は多数あります(爆)。(2016/05/23)
  • 「解析 | 発現変動 | 2群間 | 対応なし | 複製なし | DESeq2(Love_2014)」を作成しました。 DESeq2のq-valueと、DESeq2のp-valueからp.adjust関数を用いて得られたq-value (adjusted p-value)に大きく違いが出るデータに初めて遭遇し、私も驚いています。(2016/05/22)
  • 解析 | 発現変動 | 2群間 | 対応なし | 複製なし | TCC(Sun_2013)で、内部的に用いる方法をDESeqからDESeq2に変更しました。(2016/05/21)
  • R ver. 3.3.0、およびBioconductor ver. 3.3がリリースされています。NGSハンズオン講習会の講義資料はこのバージョンで作成、動作確認予定です。(2016/05/10)
  • ウェブページが大きくなりすぎて重いのは承知しておりますw。2016年8月のNGSハンズオン講習会後に、ページを2分割予定ですm(_ _)m(2016/04/27)
  • 「イントロ | 一般 | 任意のキーワードを含む行を抽出(基礎)」で、 例題4以降の多くのものについて、不具合修正やコメントを追加しました(アグリバイオ受講生提供情報)。(2016/04/20)
  • QuasRでBowtieのマッピングを行う場合に、 (内部的にはbowtie1が動いているため)リード長が1本でも1,024 bpを超えたものがあればコケマス(1024 bpはセーフで1025 bpはアウト)のでご注意ください(高橋 広夫 氏提供情報)。(2016/04/06)
  • RNA-Seq実験ハンドブック(鈴木穣 編)が刊行されます。(2016/03/22)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 応用 | TCC正規化(Sun_2013)+baySeq(Hardcastle_2010)」 が一通り動くようになりました。TCC正規化を含めることでAUC値(感度・特異度)が上がっているところまでは確認済みです。(2016/03/13)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 応用 | TCC正規化(Sun_2013)+EBSeq(Leng_2013)」 が一通り動くようになりました。TCC正規化を含めることでAUC値(感度・特異度)が上がっているところまでは確認済みです。(2016/03/13)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり | 基礎 | baySeq(Hardcastle_2010)」 が一通り動くようになりました。(2016/03/07)
  • マッピングやカウント情報取得の周辺項目をアップデートしています。(2016/02/12)
  • 使えなくなった関数名makeTranscriptDbFromGFFをmakeTxDbFromGFFに全て変更しました。 これに関連するTranscriptDbという記述をTxDbに変更しました。(2016/02/09)
  • Erratum2014.06.25のアグリバイオ大学院講義資料中で 「アセンブル結果で平均コンティグ長やN50を大きくするには、kの値を小さめにすればいい」 と全く逆のことを書いていることに、今頃気づきました。正しくは大きめにすればいいです。 (見てるヒトはほとんどいないと思いますがw)念のため修正版に差し替えてあります。大変失礼しましたm(_ _)m(2016/02/01)

  •  

  • 解析 | 一般 | アラインメント | についてを追加しました。(2015/12/16)
  • xlsx形式ファイルを読み込むやり方を「イントロ | 一般 | 読み込み | xlsx形式 | openxlsx」に示しました。(2015/11/15)
  • 2015年4-10月初旬頃Bioconductor提供パッケージ群をインストールしていた方は、 おそらくR本体のバージョンがR ver. 3.2.0(2015-04-16リリース)またはver. 3.2.1(2015-06-18リリース)だろうと思います。 この方々が、私の推奨手順通りに2015年11月にR ver. 3.2.2(2015-08-14リリース)でパッケージのアップデートをする際に 遭遇するかもしれないエラーとその対処法をインストール | についてに示しました。(2015/11/12)
  • 多群間比較用の推奨ガイドライン提唱論文(Tang et al., BMC Bioinformatics, 2015)がpublishされました。 論文概要については門田のページでも紹介しています。 講習会でよく述べている「サンプル間クラスタリング結果からDEG検出結果のおおよその見積もりが可能である」 という主張の根拠となる原著論文がこれになります。推奨ガイドライン周辺の関連項目もアップデートしました。(2015/11/05)
  • sample1.fastaのような配列が1つしかない場合に、 rowSums(x)の計算時にエラーが出ることがわかったので、該当箇所をapply(as.matrix(x), 1, sum)のような感じに変更しました。(2015/09/12)
  • 解析 | 発現変動 | 時系列 | maSigPro(Nueda_2014)が一通りできるようになりました。 まだ完全には結果を解釈しきれていませんが、「fit$SELEC」で見えているものがDEGの発現パターンであり、「out$summary」がDEGのIDリストです。(2015/08/16)
  • イントロ | 一般 | 配列取得 | プロモーター配列 | GenomicFeatures(Lawrence_2013)の例題5で、 取得したい領域がsense, antisense両方ともゲノム配列の範囲内に収まるものだけを抽出して出力するよりよいコードに書き換えました(甲斐政親氏 提供情報)。(2015/08/14)
  • イントロ | 一般 | 配列取得 | プロモーター配列 | GenomicFeatures(Lawrence_2013)の例題4で、 取得したい領域がsense, antisense両方ともゲノム配列の範囲内に収まるものだけを抽出して出力するよりよいコードに書き換えました(甲斐政親氏 提供情報)。 他の部分についても順次反映させていきます。(2015/08/04)
  • 前処理 | クオリティチェック | Overrepresented sequences | ShortRead(Morgan_2009)の「ファイルに保存」の部分で 「tmp <- cbind(names(out), out)」と書くのは冗長であるとの指摘を受けたのでその周辺を修正しました(野間口達洋氏 提供情報)。(2015/07/29)
  • 前処理 | フィルタリング | paired-end | 配列長とN数 | QuasR(Gaidatzis_2015)を作成し、 リード数が同じpaired-endデータを入力として許容する最短配列長やN数でフィルタリングするやり方を示しました(Thanks to Dr. Stadler)。(2015/06/26)
  • 前処理 | トリミング | アダプター配列除去(応用) | QuasR(Gaidatzis_2015)で QuasRの枠組みでpaired-endデータを処理する手順を示しました(Thanks to Dr. Stadler)。(2015/06/26)
  • 「前処理 | トリミング」と「前処理 | フィルタリング」の順番を入れ替えました。(2015/06/26)
  • 前処理 | フィルタリング | paired-end | 共通リード抽出 | ShortRead(Morgan_2009)で リード数の異なるpaired-endデータへの対応が完了しました。(2015/06/26)
  • 前処理 | トリミング | アダプター配列除去(基礎) | QuasR(Gaidatzis_2015)などで param_nrecが適切に反映されるように修正しました(中村浩正 氏提供情報)。(2015/06/24)
  • イントロ | NGS | 読み込み | FASTQ形式 | 基礎の例題8でNAへの対処法を追加しました(茂木朋貴氏、野間口達洋氏、他多くの受講生提供情報)。(2015/06/23)
  • 「前処理 | トリミング | アダプター配列除去」周辺の項目を更新しました。(2015/06/23)
  • イントロ | NGS | 読み込み | FASTQ形式 | 応用でgzip圧縮FASTQファイルから メモリを消費せず(一旦全部読み込むことをせずに)にサブセットを取り出す方法を示しました(野間口達洋 氏提供情報)。(2015/06/18)
  • 前処理 | クオリティチェック | QuasR(Gaidatzis_2015)の項目を追加しました。(2015/06/15)
  • 「イントロ | NGS | 読み込み | BSgenome | 基本情報を取得」 でマウスやヒトゲノムを解析する際に生じていた「整数オーバーフロー問題」を回避するコードに変更しました(野間口達洋 氏提供情報)。(2015/05/27)
  • Rパッケージのインストールで、RobLoxBioC パッケージが2015年現在のR本体の最新リリースに対応していないとのことでリストから外しました。(2015/05/25)
  • Rパッケージのインストール周辺で、limma (Ritchie et al., Nucleic Acids Res., 2015)をBioconductorから 取得しないといけないにもかかわらずCRANから取得しようとしてこけていたのに気づきました。修正済みですm(_ _)m(2015/05/25)
  • 「アセンブル | ゲノム用」の情報を更新しました。(2015/05/15)
  • パッケージのインストールのところで、SAFEではなくsafeパッケージであるというご指摘をいただきましたので該当箇所を修正しました(野間口達洋 氏提供情報)。(2015/04/24)
  • 「アセンブル | トランスクリプトーム(転写物)用」の情報を更新しました。(2015/04/22)
  • 私の所属するアグリバイオインフォマティクス教育研究プログラムでは、平成27年度もバイオインフォ関連講義を行います。 例年東大以外の企業の方、研究員、学生が2-3割程度受講しております。受講ガイダンスは4月6日17:15- 於東大農です。(2015/03/31)
  • R本体およびパッケージのインストール手順のところを更新しました。詳細はインストール | についてをごらんください。(2015/04/02)
  • MBCluster.Seqパッケージを用いた遺伝子間クラスタリングのやり方を一通り示しました。(2015/03/14)
  • 翻訳配列取得において、seqinrパッケージを用いてtranslate関数を実行するほうが 翻訳できないコドンはアミノ酸X(不明なアミノ酸)に変換してくれたり、ambiguous=Tオプションを利用することで翻訳できるものは可能な限り翻訳してくれる(高橋 広夫 氏提供情報) ということで、周辺情報を追加しました。lapply関数を用いるやり方(高橋 広夫 氏提供情報)とsapply関数を用いるやり方(甲斐 政親 氏提供情報)を示しています。(2015/03/09)
  • QuasRパッケージを用いてマッピングをする際に、getwd()で見られる パス名の中に日本語が含まれているとエラーが出る(高橋 広夫 氏提供情報)とのお知らせをいただきました。ご注意ください。(2015/03/08)
  • seqinrパッケージの原著論文(Charif et al., Bioinformatics, 2005)を2007年のものから変更しました。(2015/03/08)
  • TxDb周辺情報で、GFFファイルの読み込み時にChrCが環状ゲノムと指定するやり方(高橋 広夫 氏提供情報)を追加しました。(2015/03/04)
  • 「作図 | クラスタリング」周辺の情報を追加しました。(2015/02/15)
  • 「作図 | ROC曲線」周辺で、発現変動ランキング結果のROC曲線やAUC値の感覚を理解するための例題を充実させています。(2015/02/08)
  • 「解析 | 発現変動 | 3群間 | 対応なし | 複製あり」周辺の情報を追加しました。(2015/02/04)
  • 「解析 | シミュレーションカウントデータ」周辺で、発現変動解析時に動作確認用として用いるシミュレーションカウントデータを自在に作成するための項目を充実させつつあります。(2015/01/25)
  • QuasRパッケージ(Gaidatzis et al., Bioinformatics, 2015) 中のextractTranscriptsFromGenome関数実行部分でエラーが出るようです(QuasR ver. 1.6.2あたり; Bioconductor 3.0)。対策として当該関数をとりあえずextractTranscriptSeqsに変更しました。(2015/01/21)

  •  

  • 門田幸二 著シリーズ Useful R 第7巻 トランスクリプトーム解析、およびこのウェブページ中で頻用させていただいているQuasR パッケージの原著論文(Gaidatzis et al., Bioinformatics, 2015)が公開されたので関連個所をアップデートしました。(2014/12/03)
  • 解析 | ChIP-seq | についての情報を少しアップデートして、 実験医学2014年12月号にも掲載されているSraTailor (Oki et al., Genes Cells., 2014)の情報などを追加しました。(2014/11/25)
  • ウェブサーバ引っ越し作業のため、11/25前後でダウン予定(最長で11/21-26)です。(2014/11/06)
  • NGS解析に限らず、Rに限らず、多くの研究者が持っている一通りのデータ解析に関する解説付きのコマンド集を充実させていければと思っています。 とりあえずこのサイトでは(○○氏 提供情報)とさせていただきますので、情報をお寄せいただければ幸いです。 長期的にはこのサイトでなくてもいいので日本全体のノウハウ集や教材を統合DB的に集約するような枠組みになればと思っています。(2014/09/27)
  • 2014年10月04日にHPCIワークショップ「医療とビッグデータ解析」(9:00-9:20)に引き続いて 中級者向けバイオインフォマティクス入門講習会@仙台国際センター(10:50-12:20)で話します。 スライド中のhogeフォルダの圧縮ファイルはhoge.zip(20140929, 22:27版)です。 20140819版から、htmlのスタイルファイル情報を追加して見栄えをよくしただけです(2014/09/29)
  • 入出力のファイル名について、FASTA形式ファイルの拡張子は.fasta、FASTQ形式ファイルの拡張子は.fastqに変更する作業がほぼ完了しております。(2014/07/17)
  • 配列長とカウント数の関係のところで、 boxplotでの描画の際にparam個で分割(20分割など)するテクニックとして「floor(nrow(data)/param)+1」としていましたが、 これだと割り切れる場合でも+1してしまうことが判明したため「ceiling(nrow(data)/param)」に修正しました(佐伯亘平氏提供情報)。(2014/07/03)
  • 2014年07月22日にイルミナウェビナーで話します。興味ある方はどうぞ。(2014/06/30)
  • writeFastq関数のデフォルトがgzip圧縮(孫建強氏提供情報)であることが分かったので関連項目を修正しました。 これに関連して、FASTA形式ファイルの拡張子は.fasta、FASTQ形式ファイルの拡張子は.fastqに順次変更していきます。(2014/06/15)
  • 2014年06月12日にNAIST植物グローバル教育プロジェクト・平成26年度ワークショップ「ImageJ+Rハンズオン実習2014」 が開催されます。特に門田の部分を受講したい方は2014年4月22日に作成したより詳細なインストール手順(Windows版)を参考にしてインストールしておいてください。 Mac版のインストール手順(by 孫建強氏)もあります。 Macのヒトの注意点は、「Mac OS X のバージョンに関わらず R-3.1.0-snowleopard.pkg をインストールしたほうがよい」です。 また、実習用データ(hoge.zip; 約40MB)もダウンロードしておいてください。(2014/05/14)
  • 機能解析の遺伝子オントロジー(GO)解析とパスウェイ(Pathway)解析周辺を更新し、SeqGSEAパッケージを用いた解析のみですが一通りできるようにしました。(2014/03/30)
  • 私の所属するアグリバイオインフォマティクス教育研究プログラムでは、平成26年度も(東大生に限らず)バイオインフォ関連講義を行います。 4/9に私の第一回目の講義がありましたが、過去最高の123名の出席がありました。例年東大以外の企業の方、研究員、学生が二割程度は受講しております。 このウェブページと直接関連する講義は「ゲノム情報解析基礎」と 「農学生命情報科学特論I」ですが、背景理論の説明などは「機能ゲノム学」でも行います。 興味ある科目のみの受講も可能ですので、お気軽にどうぞ。(2014/04/10)
  • 一連の解析パイプライン(RNA-seqデータ取得 -> マッピング -> カウントデータやRPKMデータ取得 -> サンプル間クラスタリングや発現変動解析およびM-A plot描画まで)のクラスタリング部分をアップデートしました。項目名の一番下のほうです。(2014/02/26)
  • 2014年3月17-19日に九州大学にて、ワークショップ(よく分かる次世代シークエンサー解析 ~最先端トランスクリプトーム解析~)が開催されます。 私は3日目(3/19, 13:00-16:30)を担当します。興味ある方はどうぞ。締切は確か2/21です。(2014/02/17)
  • 項目名の整理を行っています。3C (Hi-C)やBS-seq周辺についても少し言及してあります。(2014/02/08)

  •  

  • 発現変動解析用RパッケージTCC (ver. 1.2.0; Sun et al., BMC Bioinformatics, 2013)がBioconductorよりリリースされました。 最新版を利用したい方は、R (ver. 3.0.2)をインストールしたのち、Bioconductor (ver. 2.13)をインストールしてください。(2013/10/17)
  • どのブラウザからでもエラーなく見られる(W3C validation)ように((Rで)マイクロアレイデータ解析も含めて)リニューアルしました。(2013/07/30)
  • 2013年7月29日まで公開していた以前の「(Rで)塩基配列解析」のウェブページや関連ファイルはRdeennki.zipからダウンロード可能です(110MB程度)。(2013/07/30)
  • 平成26年3月7日に東京お台場にて、HPCIチュートリアルの一部としてRでゲノム・トランスクリプトーム解析を行います。情報はかなりアップデート予定ですが、既にキャンセル待ちなようですみませんm(_ _)m(2013/11/25)
  • 2013年6月6日に開催されたNAIST植物グローバル教育プロジェクト・平成25年度ワークショップ のときに利用した、R(ver. 3.0.1)とTCC(ver. 1.1.99)などのインストール方法はこちら(Windows用のみ;hoge.zipはおまけ)です。
  • 平成25年6月27日、7月3, 4日にこのウェブページ関連の実習を含む講義(農学生命情報科学特論I)を行います。 東大生以外の外部の方も受講可能です。詳しくは事務局までお問い合わせください。(2013/06/08)
  • 廃止予定の関数名(read.DNAStringSet -> readDNAStringSetなど)や「前処理 | 正規化...」周辺の項目名の変更をしました。(2013/01/16)

  •  

  • htmlのタグに問題があるらしくfirefoxでエラーという指摘をTbT論文共著者の西山さんから受けましたのでその周辺を修正しました。(2012/11/15)
  • R2.15.2がリリースされていたのでこれに変更しました。(2012/11/15)
  • 若干項目名を(あまりにも場違いだったものを)変更しました、直接リンクを張ってたかた、すみませんm(_ _)m。(2012/07/12)

インストール | について

以下は、「インストール | R本体 | 最新版」と「インストール | Rパッケージ | 必要最小限プラスアルファ」の推奨インストール手順をまとめたものです。 私の環境は、Windows PCは(Windows 10; 64 bit)、Macintosh PCはMacBook Pro (MacOS Mojave ver. 10.14.1; 64 bit)です。 R Studioというものもあります。 私は大人数のハンズオン講義を円滑に進められなかった経験があるため使いませんが、通常の個人利用上は全く問題ないと思われます。

  • Windows版(R_install_win_20181115.pdf; 2018.11.15版)
  • Macintosh版(R_install_mac_20181127.pdf; 2018.11.27版)

遭遇するかもしれないエラーとその対処法を以下に示しました。とりあえずWindows版のみの提供ですが、 Macintoshでも同じようなことが起こるのかもしれません。(2015.11.12追加)

  • Windows版(R_install_troubleshoot.pdf; 2015.11.12版)

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

最新版(リリース版のこと)は、下記手順を実行します。インストールが無事完了したら、 デスクトップに「R i386 3.X.Y (32 bitの場合; XYの数値はバージョンによって異なります)」 または「R x64 3.X.Y (64 bitの場合)」アイコンが作成されます。 私は「R i386 3.X.Y」のアイコンは使わないので、いつもゴミ箱に捨てています。 「R x64 3.X.Y」アイコンのほうのみ利用しています。 尚、エンドユーザには実質的に無縁のものだと思いますが開発版(devel版)というのもあります。 2018年11月12日現在の最新版は、R-3.5.1-win.exeですね。

  1. Rのインストーラを「実行」
  2. 聞かれるがままに「次へ」などを押してとにかくインストールを完了させる
  3. 「コントロールパネル」−「デスクトップのカスタマイズ」−「フォルダオプション」−「表示(タブ)」−「詳細設定」のところで、 「登録されている拡張子は表示しない」のチェックを外してください。

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

最新版(リリース版のこと)は、下記手順を実行します。インストールが無事完了したら、 Finderを起動して、左のメニューの「アプリケーション」をクリックすると、Rのアイコンが作成されていることが確認できます。 Win同様、エンドユーザには実質的に無縁のものだと思いますがMacにも開発版(devel版)というのがあります。 2018年11月12日現在の最新版は、R-3.5.1.pkgですね。

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

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

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

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

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

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

アグリバイオで所有するノートPCは、 「インストール | Rパッケージ | 必要最小限プラスアルファ」 を利用してパッケージ群を一度にインストールしています。 「インストール | Rパッケージ | 個別(2018年11月以降)」のところは、 インストールされていない(or されなかった)パッケージを個別にインストールする際に利用してください。

インストール | Rパッケージ | ほぼ全て(削除予定)

Rパッケージの2大リポジトリであるCRANBioconductor 中のほぼすべてのパッケージをインストールするやり方です。 パソコンのHDD容量に余裕があって、数千個ものパッケージ(20GB程度分)を数時間以上かけてダウンロードしてインストールできる環境にある方は、 R本体を起動し、以下を「R コンソール画面上」でコピー&ペースト。

1. 基本形:

どこからダウンロードするか?と聞かれます。自分のいる場所から近いサイトを指定しましょう。

install.packages(available.packages()[,1], dependencies=TRUE)#CRAN中にある全てのパッケージをインストール
source("http://www.bioconductor.org/biocLite.R")#おまじない
biocLite(all_group())                  #Bioconductor中にあるほぼ全てのパッケージをインストール
biocLite("BSgenome.Athaliana.TAIR.TAIR9", suppressUpdates=TRUE)#シロイヌナズナゲノム
biocLite("BSgenome.Celegans.UCSC.ce6", suppressUpdates=TRUE)#線虫ゲノム
biocLite("BSgenome.Drerio.UCSC.danRer7", suppressUpdates=TRUE)#ゼブラフィッシュゲノム
biocLite("BSgenome.Hsapiens.NCBI.GRCh38", suppressUpdates=TRUE)#ヒトゲノム(GRCh38)
biocLite("BSgenome.Hsapiens.UCSC.hg19", suppressUpdates=TRUE)#ヒトゲノム(hg19)
biocLite("BSgenome.Mmusculus.UCSC.mm10", suppressUpdates=TRUE)#マウスゲノム(mm10)
	

2. 東大アグリバイオサーバを利用する場合:

2015年4月24現在、東京大学・弥生キャンパスにあるアグリバイオインフォマティクスの居室でのみ利用可能。 動作確認中。寺田透 先生提供情報。

#CRAN中にある全てのパッケージをインストール
options(repos="http://finlandia.iu.a.u-tokyo.ac.jp/CRAN")#利用するリポジトリを指定
install.packages(available.packages()[,1], dependencies=TRUE)#全てのパッケージをインストール

#Bioconductor中にあるほぼ全てのパッケージをインストール
source("http://finlandia.iu.a.u-tokyo.ac.jp/BioC/biocLite.R")#おまじない
biocLite(all_group(), suppressUpdates=TRUE)#Bioconductor中にあるほぼ全てのパッケージをインストール
biocLite("BSgenome.Athaliana.TAIR.TAIR9", suppressUpdates=TRUE)#シロイヌナズナゲノム
biocLite("BSgenome.Celegans.UCSC.ce6", suppressUpdates=TRUE)#線虫ゲノム
biocLite("BSgenome.Drerio.UCSC.danRer7", suppressUpdates=TRUE)#ゼブラフィッシュゲノム
biocLite("BSgenome.Hsapiens.NCBI.GRCh38", suppressUpdates=TRUE)#ヒトゲノム(GRCh38)
biocLite("BSgenome.Hsapiens.UCSC.hg19", suppressUpdates=TRUE)#ヒトゲノム(hg19)
biocLite("BSgenome.Mmusculus.UCSC.mm10", suppressUpdates=TRUE)#マウスゲノム(mm10)
	

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

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

1. R本体を起動

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

以下を「R コンソール画面」上でコピー&ペースト。 どこからダウンロードするか?と聞かれるので、その場合は自分から近いサイトを指定。

#前処理(BiocManagerがなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番1(CRANから提供されているパッケージ群)
BiocManager::install("ape", update=F)
BiocManager::install("bio3d", update=F)#2018.11.16追加
BiocManager::install("blockmodeling", update=F)
BiocManager::install("cclust", update=F)
BiocManager::install("class", update=F)
BiocManager::install("cluster", update=F)
BiocManager::install("clValid", update=F)
BiocManager::install("data.table", update=F)#2018.11.20追加
BiocManager::install("devtools", update=F)#2018.11.20追加
BiocManager::install("dplyr", update=F)#2018.11.20追加
BiocManager::install("DT", update=F)   #2018.11.20追加
BiocManager::install("e1071", update=F)
BiocManager::install("fields", update=F)
BiocManager::install("GeneCycle", update=F)
BiocManager::install("glmnet", update=F)
BiocManager::install("gptk", update=F)
BiocManager::install("GSA", update=F)
BiocManager::install("heatmaply", update=F)#2018.11.20追加
BiocManager::install("KernSmooth", update=F)
BiocManager::install("knitr", update=F)#2018.11.26追加
BiocManager::install("mapdata", update=F)
BiocManager::install("maps", update=F)
BiocManager::install("MASS", update=F)
BiocManager::install("mixOmics", update=F)
BiocManager::install("MVA", update=F)
BiocManager::install("openxlsx", update=F)
BiocManager::install("Peptides", update=F)#2018.11.16追加
BiocManager::install("plotly", update=F)#2018.11.20追加
BiocManager::install("PoissonSeq", update=F)
BiocManager::install("pvclust", update=F)
BiocManager::install("qqman", update=F)
BiocManager::install("R6", update=F)   #2018.11.16追加
BiocManager::install("rbamtools", update=F)
BiocManager::install("RColorBrewer", update=F)#2018.11.20追加
BiocManager::install("rclipboard", update=F)#2018.12.03追加
BiocManager::install("RCurl", update=F)
BiocManager::install("rentrez", update=F)#2018.11.16追加
BiocManager::install("rgl", update=F)
BiocManager::install("rmarkdown", update=F)#2018.11.27追加
BiocManager::install("RobLoxBioC", update=F)
BiocManager::install("rrBLUP", update=F)
BiocManager::install("samr", update=F)
BiocManager::install("scatterplot3d", update=F)
BiocManager::install("seqinr", update=F)
BiocManager::install("shiny", update=F)#2018.11.19追加
BiocManager::install("shinyBS", update=F)#2018.12.03追加
BiocManager::install("shinycssloaders", update=F)#2018.12.02追加
BiocManager::install("shinydashboard", update=F)#2018.11.20追加
BiocManager::install("shinyWidgets", update=F)#2018.11.20追加
BiocManager::install("som", update=F)
BiocManager::install("st", update=F)
BiocManager::install("varSelRF", update=F)
BiocManager::install("vcfR", 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("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("DNAcopy", update=F)
BiocManager::install("doMC", update=F)
BiocManager::install("EBSeq", update=F)
BiocManager::install("EDASeq", update=F)
BiocManager::install("EGSEA", update=F)
BiocManager::install("EGSEAdata", update=F)
BiocManager::install("edgeR", update=F)
BiocManager::install("frma", update=F)
BiocManager::install("gage", update=F)
BiocManager::install("gcrma", 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("globaltest", 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("hgu133a.db", update=F)
BiocManager::install("hgu133plus2probe", update=F)
BiocManager::install("hgug4112a.db", update=F)
BiocManager::install("illuminaMousev2.db", update=F)
BiocManager::install("impute", update=F)
BiocManager::install("inSilicoDb", 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("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("rat2302.db", update=F)
BiocManager::install("rat2302probe", update=F)
BiocManager::install("recount", update=F)
BiocManager::install("REDseq", update=F)
BiocManager::install("rGADEM", 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("SeqGSEA", 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("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.Celegans.UCSC.ce11.refGene", update=F)
BiocManager::install("TxDb.Drerio.UCSC.danRer10.refGene", update=F)
BiocManager::install("TxDb.Hsapiens.UCSC.hg38.knownGene", update=F)
BiocManager::install("vsn", update=F)

#本番2.5(Githubから提供されているパッケージ)
#devtools::install_github("andrewsali/plotlyBars", upgrade=F)#2018.11.20追加

#本番3(Bioconductorから提供されているゲノム配列パッケージ群)
BiocManager::install("BSgenome.Athaliana.TAIR.TAIR9", update=F)#シロイヌナズナゲノム
BiocManager::install("BSgenome.Celegans.UCSC.ce11", update=F)#線虫ゲノム
BiocManager::install("BSgenome.Drerio.UCSC.danRer10", update=F)#ゼブラフィッシュゲノム
BiocManager::install("BSgenome.Hsapiens.UCSC.hg38", update=F)#ヒトゲノム(hg38)
	

3. 確認

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

#1回目
library(ape)
library(baySeq)
library(bio3d)
library(biomaRt)
library(Biostrings)
library(BSgenome)
library(BSgenome.Athaliana.TAIR.TAIR9)
library(BSgenome.Celegans.UCSC.ce11)
library(BSgenome.Drerio.UCSC.danRer10)
library(BSgenome.Hsapiens.UCSC.hg38)
library(cclust)
library(cluster)
library(clusterStab)
library(data.table)
library(DESeq2)
library(devtools)
library(dplyr)
library(DT)
library(e1071)
library(EBSeq)
library(edgeR)
library(fields)
library(GenomicAlignments)
library(GenomicFeatures)
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(msa)
library(MVA)
library(openxlsx)
library(org.Hs.eg.db)
library(pcaMethods)
library(Peptides)
library(plotly)
library(plotlyBars)
library(qqman)
library(qrqc)
library(QuasR)
library(R6)
library(rbamtools)
library(RColorBrewer)
library(RCurl)
library(recount)
library(rgl)
library(rmarkdown)
library(rrBLUP)
library(Rsamtools)
library(rentrez)
library(rtracklayer)
library(scatterplot3d)
library(SeqGSEA)
library(seqinr)
library(seqLogo)
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ShortRead)
library(som)
library(SRAdb)
library(TCC)
library(TxDb.Celegans.UCSC.ce11.refGene)
library(TxDb.Drerio.UCSC.danRer10.refGene)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(vcfR)

#2回目(ここの実行結果でエラーが出てなければOK)
library(ape)
library(baySeq)
library(bio3d)
library(biomaRt)
library(Biostrings)
library(BSgenome)
library(BSgenome.Athaliana.TAIR.TAIR9)
library(BSgenome.Celegans.UCSC.ce11)
library(BSgenome.Drerio.UCSC.danRer10)
library(BSgenome.Hsapiens.UCSC.hg38)
library(cclust)
library(cluster)
library(clusterStab)
library(data.table)
library(DESeq2)
library(devtools)
library(dplyr)
library(DT)
library(e1071)
library(EBSeq)
library(edgeR)
library(fields)
library(GenomicAlignments)
library(GenomicFeatures)
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(msa)
library(MVA)
library(openxlsx)
library(org.Hs.eg.db)
library(pcaMethods)
library(Peptides)
library(plotly)
library(plotlyBars)
library(qqman)
library(qrqc)
library(QuasR)
library(R6)
library(rbamtools)
library(RColorBrewer)
library(RCurl)
library(recount)
library(rgl)
library(rmarkdown)
library(rrBLUP)
library(Rsamtools)
library(rentrez)
library(rtracklayer)
library(scatterplot3d)
library(SeqGSEA)
library(seqinr)
library(seqLogo)
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ShortRead)
library(som)
library(SRAdb)
library(TCC)
library(TxDb.Celegans.UCSC.ce11.refGene)
library(TxDb.Drerio.UCSC.danRer10.refGene)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(vcfR)
	

4. Optional:pandocのインストール

TCC-GUIをRguiから起動したい超マニアックなヒトのみが対象です(日本に数人いるかどうか)。 RStudioを利用する場合は、デフォルトでインストール済みなので不必要です。 具体的な作業は、pandocから、 pandoc-2.4-windows-x86_64.msiなどの名前のインストーラをダウンロードして自力でインストール。 以下の実行結果がTRUEとなればOK:

library(rmarkdown)
pandoc_available()
	

インストール | Rパッケージ | 必要最小限(削除予定)

(Rで)塩基配列解析中で利用するパッケージのみインストールするやり方です。 Rパッケージの2大リポジトリであるCRANBioconductor から提供されているパッケージ群のうち、ごく一部のインストールに相当しますので、相当短時間でインストールが完了します。

1. R本体を起動

2. CRANから提供されているパッケージ群のインストール

以下を「R コンソール画面上」でコピー&ペースト。 どこからダウンロードするか?と聞かれるので、その場合は自分のいる場所から近いサイトを指定しましょう。

install.packages("samr")
install.packages("seqinr")
	

3. Bioconductorから提供されているパッケージ群のインストール

ゲノム配列パッケージ以外です。

source("http://bioconductor.org/biocLite.R")#おまじない
biocLite("baySeq", suppressUpdates=TRUE)
biocLite("biomaRt", suppressUpdates=TRUE)
biocLite("Biostrings", suppressUpdates=TRUE)
biocLite("BiSeq", suppressUpdates=TRUE)
biocLite("BSgenome", suppressUpdates=TRUE)
biocLite("bsseq", suppressUpdates=TRUE)
biocLite("ChIPpeakAnno", suppressUpdates=TRUE)
biocLite("chipseq", suppressUpdates=TRUE)
biocLite("ChIPseqR", suppressUpdates=TRUE)
biocLite("ChIPsim", suppressUpdates=TRUE)
biocLite("cosmo", suppressUpdates=TRUE)
biocLite("CSAR", suppressUpdates=TRUE)
biocLite("DEGseq", suppressUpdates=TRUE)
biocLite("DESeq", suppressUpdates=TRUE)
biocLite("DESeq2", suppressUpdates=TRUE)
biocLite("DiffBind", suppressUpdates=TRUE)
biocLite("doMC", suppressUpdates=TRUE)
biocLite("EBSeq", suppressUpdates=TRUE)
biocLite("EDASeq", suppressUpdates=TRUE)
biocLite("edgeR", suppressUpdates=TRUE)
biocLite("GenomicAlignments", suppressUpdates=TRUE)
biocLite("GenomicFeatures", suppressUpdates=TRUE)
biocLite("ggplot2", suppressUpdates=TRUE)
biocLite("girafe", suppressUpdates=TRUE)
biocLite("limma", suppressUpdates=TRUE)
biocLite("maSigPro", suppressUpdates=TRUE)
biocLite("MBCluster.Seq", suppressUpdates=TRUE)
biocLite("htSeqTools", suppressUpdates=TRUE)
biocLite("NBPSeq", suppressUpdates=TRUE)
biocLite("phyloseq", suppressUpdates=TRUE)
biocLite("PICS", suppressUpdates=TRUE)
biocLite("qrqc", suppressUpdates=TRUE)
biocLite("QuasR", suppressUpdates=TRUE)
biocLite("r3Cseq", suppressUpdates=TRUE)
biocLite("REDseq", suppressUpdates=TRUE)
biocLite("rGADEM", suppressUpdates=TRUE)
biocLite("rMAT", suppressUpdates=TRUE)
biocLite("Rsamtools", suppressUpdates=TRUE)
biocLite("rtracklayer", suppressUpdates=TRUE)
biocLite("segmentSeq", suppressUpdates=TRUE)
biocLite("SeqGSEA", suppressUpdates=TRUE)
biocLite("seqLogo", suppressUpdates=TRUE)
biocLite("ShortRead", suppressUpdates=TRUE)
biocLite("SplicingGraphs", suppressUpdates=TRUE)
biocLite("SRAdb", suppressUpdates=TRUE)
biocLite("TCC", suppressUpdates=TRUE)
biocLite("TxDb.Celegans.UCSC.ce6.ensGene", suppressUpdates=TRUE)
biocLite("TxDb.Hsapiens.UCSC.hg19.knownGene", suppressUpdates=TRUE)
biocLite("TxDb.Hsapiens.UCSC.hg38.knownGene", suppressUpdates=TRUE)
biocLite("TxDb.Mmusculus.UCSC.mm10.knownGene", suppressUpdates=TRUE)
biocLite("TxDb.Rnorvegicus.UCSC.rn5.refGene", suppressUpdates=TRUE)
biocLite("yeastRNASeq", suppressUpdates=TRUE)
	

4. Bioconductorから提供されているパッケージ群のインストール

ゲノム配列パッケージです。一つ一つの容量が尋常でないため、 必要に応じてテキストエディタなどに予めコピペしておき、いらないゲノムパッケージを削除してからお使いください。

source("http://bioconductor.org/biocLite.R")#おまじない
biocLite("BSgenome.Athaliana.TAIR.TAIR9", suppressUpdates=TRUE)#シロイヌナズナゲノム
biocLite("BSgenome.Celegans.UCSC.ce6", suppressUpdates=TRUE)#線虫ゲノム
biocLite("BSgenome.Drerio.UCSC.danRer7", suppressUpdates=TRUE)#ゼブラフィッシュゲノム
biocLite("BSgenome.Hsapiens.NCBI.GRCh38", suppressUpdates=TRUE)#ヒトゲノム(GRCh38)
biocLite("BSgenome.Hsapiens.UCSC.hg19", suppressUpdates=TRUE)#ヒトゲノム(hg19)
biocLite("BSgenome.Mmusculus.UCSC.mm10", suppressUpdates=TRUE)#マウスゲノム(mm10)
	

インストール | 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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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がなければインストール)
if (!requireNamespace("BiocManager", quietly=T))#BiocManagerパッケージがインストールされてなければ...
    install.packages("BiocManager")    #BiocManagerをインストールせよ

#本番
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)
  2. 「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からもわかります):

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

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

  7. カウントデータ(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の中身を指定したファイル名で保存
    	
  8. ABI_SOLiD/25-35bp/single-end/mouse (SRA000306; EB vs. ES) data (Cloonan et al., Nat Methods, 2008)
  9. Illumina/50bp/paired-end/mouse (SRA012213; liver) data (Robertson et al., Nat Methods, 2010)
  10. Illumina/35bp/single-end/human (SRA010153; MAQC) data (Bullard et al., BMC Bioinformatics, 2010)
  11. SRR037439から得られるFASTQファイルの最初の2000行分を抽出したMAQC2 brainデータ

    非圧縮版:SRR037439.fastq

    gzip圧縮版:SRR037439.fastq.gz

  12. NBPSeqパッケージ(Di et al., SAGMB, 10:art24, 2011)中の ArabidopsisのBiological replicatesデータ(G1群3サンプル vs. G2群3サンプル; Cumbie et al., PLoS One, 2011)です。
  13. 26,221 genes×6 samplesの「複製あり」タグカウントデータ(data_arab.txt)

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

  14. ReCountデータベース(Frazee et al., BMC Bioinformatics, 2011)
  15. マッピング済みの遺伝子発現行列形式のデータセットを多数提供しています。

  16. Yeastの二群間比較用データ(2 mutant strains vs. 2 wild-types; technical replicates)
  17. 7065行 × 4列のyeast RNA-seqデータ(data_yeast_7065.txt)

    R Console画面上で「library(yeastRNASeq)」と打ち込んでエラーが出る場合は、a.をコピペで実行してパッケージをインストールしましょう。 このパッケージ中には他に、fastq形式ファイル(500,000 reads)と、bowtieでマッピング(unique mapping and allowing up to two mismatches)したBowtie形式ファイルがそれぞれ4ファイルずつあります。

    a. yeastRNASeqパッケージのインストール:

    source("http://www.bioconductor.org/biocLite.R")#おまじない
    biocLite("yeastRNASeq")                #yeastRNASeqパッケージのインストール
    	

    b. yeastRNASeqパッケージがインストールされていれば以下のコピペでも取得可能:

    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の中身を指定したファイル名で保存
    	
  18. 上記Yeastの二群間比較用データを用いてGC-content normalizationなどを行う場合に必要な情報
    yeast genes (SGD ver. r64)のGC含量(yeastGC_6717.txt)やlength情報(yeastLength_6717.txt)。
    R Console画面上で「library(EDASeq)」と打ち込んでエラーが出る場合は、a.をコピペで実行してパッケージをインストールしましょう。

    a. EDASeqパッケージのインストール:

    source("http://www.bioconductor.org/biocLite.R")#おまじない
    biocLite("EDASeq")                     #EDASeqパッケージのインストール
    	

    b. EDASeqパッケージがインストールされていれば以下のコピペでも取得可能:

    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の中身を指定したファイル名で保存
    	
  19. 「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の中身を指定したファイル名で保存
    	
  20. 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の中身を指定したファイル名で保存
    	
  21. 上記の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の中身を指定したファイル名で保存
    	
  22. 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の中身を指定したファイル名で保存
    	
  23. 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の中身を指定したファイル名で保存
    	
  24. Illumina/35bp/single-end/human (SRA000299; kidney vs. liver) data (Marioni et al., Genome Res., 2008)
  25. ランダムな塩基配列から生成したリファレンスゲノム配列データ(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の中身を指定したファイル名で保存
    	
  26. 上記リファレンスゲノム配列データ(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の中身を指定したファイル名で保存
    	
  27. 上記リファレンスゲノム配列データ(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の中身を指定したファイル名で保存
    	
  28. 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の中身を指定したファイル名で保存
    	
  29. 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の中身を指定したファイル名で保存
    	
  30. 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で指定したファイル名で保存
    	
  31. Illumina/75bp/single-end/human (SRA061145) data (Wang et al., Nucleic Acids Res., 2013)
  32. ヒト肺の3群間比較用データ:normal human bronchial epithelial (HBE) cells, human lung cancer A549, and H1299 cells

  33. Illumina HiSeq 2000/100bp/paired-end/human (GSE42960) data (Chan et al., Hum. Mol. Genet., 2013)
  34. ヒト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の中身を指定したファイル名で保存
    	
  35. Illumina Genome Analyzer II/54bp/single-end/human (SRP017142; GSE42212) data (Neyret-Kahn et al., Genome Res., 2013)
  36. ヒトfibroblastsの2群間比較用データ:3 proliferative samples vs. 3 Ras samples

  37. Illumina HiSeq 2000 (GPL14844)/50bp/single-end/Rat (SRP037986; GSE53960) data (Yu et al., Nat Commun., 2014)
  38. ラットの10組織×雌雄(2種類)×4種類の週齢(2, 6, 21, 104 weeks)×4 biological replicatesの計320サンプルからなるデータ。

  39. 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)
  40. ショウジョウバエの様々な組織のデータ(modENCODE)。29 dissected tissue samplesのstrand-specific, paired-endのbiological replicates (duplicates)だそうです。

  41. Illumina HiSeq 2000/36bp/single-end/Arabidopsis (GSE36469) data (Huang et al., Development, 2012)
  42. シロイヌナズナの2群間比較用データ:4 DEX-treated vs. 4 mock-treated

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

  43. PacBio/xxx bp/Human (ERP003225) data (Sharon et al., Nat Biotechnol., 2013)
  44. ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  45. PacBio/xxx bp/Chicken (SRP038897 by DRA; SRP038897 by ENA; SRP038897 by SRA) data (Sharon et al., PLoS One, 2014)
  46. ニワトリの長鎖RNA-seqデータです。配列長はリードによって異なります。

  47. 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の中身を指定したファイル名で保存
    	
  48. 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 | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    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の中身を指定したファイル名で保存
    	
  49. 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 | 配列取得 | シミュレーションデータ | ランダムな塩基配列の生成からと基本的に同じです。

    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の中身を指定したファイル名で保存
    	
  50. 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の中身を指定したファイル名で保存
    	
  51. 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の中身を指定したファイル名で保存
    	
  52. 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の中身を指定したファイル名で保存
    	
  53. PacBio/xxx bp/Human (SRP036136) data (Tilgner et al., PNAS, 2014)
  54. ヒトの長鎖RNA-seqデータです。配列長はリードによって異なります。

  55. 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の中身を指定したファイル名で保存
    	
  56. 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の中身を指定したファイル名で保存
    	
  57. 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の中身を指定したファイル名で保存
    	
  58. 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の中身を指定したファイル名で保存
    	
  59. 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の中身を指定したファイル名で保存
    	
  60. recount2Collado-Torres et al., Nat Biotechnol., 2017
  61. ReCount(Frazee et al., BMC Bioinformatics, 2011)の後継版です。 Bioconductor上でもrecountというRパッケージが提供されています。

  62. pasillaパッケージ中の複製あり2群間比較用カウントデータです(孫建強氏 提供情報)。
  63. 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の中身を指定したファイル名で保存
    	
  64. pasillaパッケージ中の複製なし2群間比較用カウントデータです(孫建強氏 提供情報)。
  65. 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の中身を指定したファイル名で保存
    	
  66. 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の中身を指定したファイル名で保存
    	

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

例えばタブ区切りテキストファイルの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_f1に格納(アノテーションファイル)
out_f <- "hoge14.txt"                  #出力ファイル名を指定してout_fに格納
param <- "ID=gene"                     #検索したい文字列を指定

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

#本番(リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得て、その行のみ出力)
hoge <- sapply(param, grep, x=data)    #リストファイル中の要素一つ一つに対して、要素中の文字列と一致する行番号情報を得ている
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の中身を指定したファイル名で保存
	

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

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に格納
    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の中身を指定したファイル名で保存
	

イントロ | 一般 | 指定した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)を取得(基礎) | 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)を取得

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)を取得

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)を取得

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の中身を指定したファイル名で保存
	

イントロ | 一般 | 配列取得 | プロモーター配列 | 公共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塩基までの範囲を取得するやり方です。

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)の[上流500塩基, 下流0塩基]のプロモーター配列を取得する場合:

UCSCからはArabidopsisの遺伝子アノテーション情報が提供されていないため、 TAIR10_GFF3_genes.gffを予めダウンロードしておき、 makeTxDbFromGFF関数を用いてTxDbオブジェクトを作成しています。 イントロ | NGS | 読み込み | FASTA形式 | description行の記述を整形を参考にして、 description行の文字列をgffファイルと対応がとれるように変更しています。 例題4のフィルタリング部分のコードを若干変更して対応しています(2015.08.14追加)。(甲斐政親氏 提供情報)

in_f1 <- "TAIR10_chr_all.fas"          #入力ファイル名を指定してin_f1に格納(リファレンス配列)
in_f2 <- "TAIR10_GFF3_genes.gff"       #入力ファイル名を指定してin_f2に格納(GFF3またはGTF形式のアノテーションファイル)
out_f <- "hoge5.fasta"                 #出力ファイル名を指定してout_fに格納
param_upstream <- 500                  #転写開始点上流の塩基配列数を指定
param_downstream <- 0                  #転写開始点下流の塩基配列数を指定
param3 <- c("Chr1","Chr2","Chr3","Chr4","Chr5","ChrM","ChrC")#置換したい文字列を指定

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

#前処理(ゲノム情報を取得)
fasta <- readDNAStringSet(in_f1, format="fasta")#in_f1で指定したファイルの読み込み
fasta                                  #確認してるだけです
names(fasta) <- param3                 #names(fasta)の中身をparam3で置換
fasta                                  #確認してるだけです
writeXStringSet(fasta, file="hogegege.fa", format="fasta", width=50)#fastaの中身を指定したファイル名で保存
seqinfo(FaFile("hogegege.fa"))         #確認してるだけです

#前処理(アノテーション情報を取得)
txdb <- makeTxDbFromGFF(in_f2, format="gff3", circ_seqs=c("ChrC","ChrM"))#txdbオブジェクトの作成
txdb                                   #確認してるだけです
seqinfo(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 <- width(fasta)[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("hogegege.fa"), hoge)#指定した範囲の塩基配列情報を取得
fasta                                  #確認してるだけです

#ファイルに保存
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) を読み込むやり方です。

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経由で行うもの、という理解でいいです。

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

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)                             #確認してるだけです
length(hoge)                           #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge, 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)                             #確認してるだけです
length(hoge)                           #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge, 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)                             #確認してるだけです
length(hoge)                           #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge, 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)                             #確認してるだけです
length(hoge)                           #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge, 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)                             #確認してるだけです
length(hoge)                           #ID数を表示

#本番(配列取得)
out <- getSequence(id=hoge, type=param_attribute,#指定したパラメータで配列取得した結果をoutに格納
                seqType=param_seqtype, mart=mart)#指定したパラメータで配列取得した結果をoutに格納
dim(out)                               #配列数を表示

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

イントロ | 一般 | 読み込み | 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 | 様々なプラットフォーム

Pacific Biosciences (PacBio)について:

PacBio RS II Systemは最長で40,000bp以上(平均でも10,00 bp以上)読めるようですが配列のqualityが若干(85%程度)劣るようです。 しかしエラーの入る場所がランダムなようで多数決ルール(majority rule)でエラー補正がかなりうまくいくらしいです(コンセンサス配列の精度は99.999%)。 このロングリードでトランスクリプトーム配列決定(新規アイソフォームの発見)をヒト(Sharon et al., 2013)や ニワトリ(Thomas et al., 2014)で行った論文などが出始めています。 Smart-seq2の実験手順(Picelli et al., Nat Protoc., 2014)なども出ているようですね。 葉緑体ゲノムでのアセンブリ性能評価(Ferrarini et al., BMC Genomics, 2013)もなされています。

NGS機器同士の比較:

いくつか性能評価論文も出ているようです。

配列長に関するあたりの旧世代との比較:

生み出す配列長の特徴としては、いわゆる第一世代のApplied Biosystems Prism 3730 (ABI3730)やGEヘルスケア社のMegaBACEなどが500-1000bp程度読めるのに対して、 NGSデータはRoche 454が400bp程度(最新のGS FLX+という機種は700bpくらい読めるらしい)、Illumina Genome HiSeq 2500が最近片側150bpのpaired-end(ペアードエンド;合計300bp)を読めるようになった程度です。

NGSプラットフォームに特徴的なエラーについて(Error profile):

三点あるようですが、これを書いた当時(2010年頃)とは機器(Roche 454 GS20やIllumina 1G Analyzer)状況はもはや違うと思います。 どの論文を参考にしたかもすでに記憶があいまいです。下記三つの論文のうちのどれかだとは思うのですが。。。 どれが今も当てはまるのかまではちゃんとフォローしきれていませんのでご注意ください。

  • 3'末端(terminal ends)に進むほどbase call errorが増大(Harismendy et al., 2009)
  • 読まれる配列がGC含量の高いものに偏っている(compositional bias for high-GC reads; Dohm et al., 2008)
  • 単純なリピート配列をsequenceするのが不得手(inaccurate determination of repeat sequences; Huse et al., 2007)

ABI SOLiDについて:

このプラットフォームのbase call (塩基配列の読み方)は特殊です。0,1,2,3の四つの数字で表現され、これらは"color"といわれるようです。 で、この各colorは一つ前の塩基と関連して塩基を表現しているようです。 となると本当の最初の塩基はどうやって表現するのだろう?と思いますが、アダプター配列のような感じでランごとに決まった塩基が付加?!されているようです(The reads's first base is a constant per run)。 というわけで、実験によって得られたこの"color space"を"base space"に変換するといったことをやる必要があるようですね。 このような特殊性のために、SOLiDデータのためのプログラムはそれほど多くないのでしょう(Miller et al., 2010)。

イントロ | NGS | qPCRやmicroarrayなどとの比較

一言でいえば、3者の再現性は高いようですが、全般的にはRNA-seqのほうがダイナミックレンジが広く特に低発現領域で優れているようです。

NGS(RNA-seq) vs. RT-PCR:

NGS(RNA-seq) vs. マイクロアレイ:

マイクロアレイ vs. RT-PCR:

三者比較:

イントロ | NGS | 可視化(ゲノムブラウザやViewer)

可視化ツールも結構あります。

R以外(ゲノムブラウザ; client-side):

Review(Wang et al., Brief Bioinform., 2013)によるserver-sideと client-sideの分類分けのうち、client-sideに相当するものたちだと思われます。AJAX-based browsersともいうらしいです。

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日)

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

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)          #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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
#getSRAfile(hoge$run, srcType='ftp', fileType='fastq')#こういう記述の仕方でもいいみたいです。
getFASTQfile(hoge$run, 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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, 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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, 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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, 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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, 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)          #hoge$runで指定したSRRから始まるIDのFASTQファイルサイズ情報などを表示

#本番(FASTQファイルのダウンロード)
getFASTQfile(hoge$run, 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)の場合:

基本形です。

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)の場合:

in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定して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; Reiser et al., Curr Protoc Bioinformatics., 2017)のdescription部分をまるまる任意の文字列に置換したい場合:

染色体の並びがparamで指定したものと同じであることが既知という前提です。ゲノム配列ファイル自体は120MB程度あります。

in_f <- "TAIR10_chr_all.fas"           #入力ファイル名を指定して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)               #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に格納
hoge <- strsplit(as.character(description), param3, fixed=TRUE)#description中の文字列をparam3で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param4))#hogeのリスト中の(param4)番目の要素のみ取り出してdescriptionに格納

#本番
fastq <- ShortReadQ(sread(fastq), quality(fastq), description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

6. サンプルデータ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つ目の要素を抽出

writeXStringSet関数実行時にcompress=Fとして非圧縮FASTA形式ファイルを出力しています。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納
out_f <- "hoge6.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- " "                          #区切り文字を指定
param2 <- 1                            #分割後に抽出したい要素番号を指定
param3 <- "."                          #区切り文字を指定
param4 <- 2                            #分割後に抽出したい要素番号を指定

#必要なパッケージをロード
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に格納
hoge <- strsplit(as.character(description), param3, fixed=TRUE)#description中の文字列をparam3で区切った結果をリスト形式でhogeに格納
description <- BStringSet(sapply(hoge,"[[", param4))#hogeのリスト中の(param4)番目の要素のみ取り出してdescriptionに格納

#本番
fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
names(fasta) <- description            #description情報部分をfastaに追加
fasta                                  #確認してるだけです

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

イントロ | NGS | 読み込み | Illuminaの*_seq.txt

Illuminaの出力ファイルで、初期のものは*_seq.txtというものらしいです。実際の生の配列データファイルは数百程度に分割されています。 ここでは、そのファイル群がおさめられているディレクトリ(例:tmp)を指定して、その中の「*_seq.txt」ファイル群について一気に行う方法を示します。 ここでは、(s_1_0001_seq.txts_1_0007_seq.txtの二つのファイルを含む; それぞれ1394行および826行からなる)フォルダを指定して読み込み、multi-FASTA形式で出力するやり方を示します。

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

1. 指定したディレクトリ中に*_seq.txtという形式のファイルしかないという前提のもとで行う場合:

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param <- "kkk"                         #FASTA形式ファイルのdescription行に記述する内容を指定

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

#入力ファイルの読み込み
colClasses <- c(rep(list(NULL), 4), "DNAString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。最初の4列には"NULL"を、最後の5列目には"DNAString"というベクトルを作成してcolClassesに格納している
fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列(この場合5列目)をreadXStringColumns関数を用いて読み込むことでXStringSetオブジェクト(この場合"X"は"DNA"に相当)にした結果をfastaに格納
names(fasta) <- paste(param, 1:length(fasta), sep="_")#(multi-)FASTA形式のdescription部分を作成している
fasta                                  #確認してるだけです

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

2. param2で指定した"s_1_*_seq.txt"という感じのファイル名のもののみ読み込む場合:

out_f <- "hoge2.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "kkk"                        #FASTA形式ファイルのdescription行に記述する内容
param2 <- "s_1_.*_seq.txt"             #"s_1_*_seq.txt"という感じのファイル名のものを読み込みたい場合("."の有無に注意!!)

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

#入力ファイルの読み込み
files <- list.files(getwd(), pattern=param2)#param2で指定した正規表現にマッチする文字列を含むファイルのリストをfilesに格納
strsplit(readLines(files[[1]],1), "\t")#filesで読み込んだファイルのリストについて、最初のファイルの一行目をタブで区切って表示させているだけ。5列目のデータが塩基配列情報だということを確認しているにすぎない。
colClasses <- c(rep(list(NULL), 4), "DNAString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。最初の4列には"NULL"を、最後の5列目には"DNAString"というベクトルを作成してcolClassesに格納している
fasta <- readXStringColumns(getwd(), pattern=param2, colClasses=colClasses)[[1]]#colClassesで指定した列(この場合5列目)をreadXStringColumns関数を用いて読み込むことでXStringSetオブジェクト(この場合"X"は"DNA"に相当)にした結果をfastaに格納
names(fasta) <- paste(param1, 1:length(fasta), sep="_")#(multi-)FASTA形式のdescription部分を作成している
fasta                                  #確認してるだけです

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

イントロ | NGS | 読み込み | Illuminaの*_qseq.txt

Illuminaの出力ファイルで、比較的最近のは*_qseq.txtというものらしいです。実際の生の配列データファイルは数百程度に分割されています。ここでは、そのファイル群がおさめられているディレクトリ(例:tmp)を指定して、その中の「*_qseq.txt」ファイル群について一気に行う方法を示します。ここでは、(s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込み、multi-FASTA形式で出力するやり方を示します。

*_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいるので、その列の部分のみを抽出しているだけです。尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。

FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイル上で取り扱うスコアとなります。

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

1. 配列情報のみ抽出したい場合:

param1 <- "kkk"                        #description行に記述する内容を指定

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[9] <- c("DNAString")        #9列目が"DNAString"だという情報を与えている
fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をfastaに格納

#後処理(description部分を追加)
names(fasta) <- paste(param1, 1:length(fasta), sep="_")#description部分を作成している
fasta                                  #確認してるだけです
	

2. Illumina FASTQ形式でdescription行が"kkk_..."のようにしたい場合:

param1 <- "kkk"                        #description行に記述する内容

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[9:10] <- c("DNAString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。9, 10列目がそれぞれ"DNAString", "BString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(param1, 1:length(hoge[[1]]), sep="_")#description部分を作成している
description <- BStringSet(description) #型変換をしている

#本番(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[1]], hoge[[2]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示
	

3. Illumina FASTQ形式で、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

つまり、descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すということ。

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(description) #型変換をしている

#本番(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示
	

イントロ | ファイル形式の変換 | について

少し整理しました。(2018.05.30)。

R用:

  • BAM --> BED:「イントロ | ファイル形式の変換 | BAM --> BED」で可能
  • FASTQ --> FASTA:「イントロ | ファイル形式の変換 | FASTQ --> FASTA」で可能
  • GenBank --> FASTA:「イントロ | ファイル形式の変換 | GenBank --> FASTA」で可能
  • GFF3 --> GTF:「イントロ | ファイル形式の変換 | GFF3 --> GTF」で可能
  • qseq --> FASTA:「イントロ | ファイル形式の変換 | qseq --> FASTA」で可能
  • qseq --> FASTQ:「イントロ | ファイル形式の変換 | qseq --> Sanger FASTQ」で可能

R以外:

  • BAM --> BED:
  • BEDToolsbamToBedで可能

    例:bamToBed -i hoge.bam > hoge.bed

  • BAMのソート:
  • SAMtoolsで可能。

    例:samtools sort hoge.bam hoge_sorted

  • qseq --> FASTQ:
  • qseq2fastq.plというperlプログラムで可能

  • SAM --> BAM:
  • SAMtoolsで可能。

    例:samtools view -Sb hoge.sam > hoge.bam

  • SAM --> BED:
  • sam2bed.plというperlプログラムで可能。

  • SOAP --> SAM:
  • soap2sam.plというperlプログラムで可能。

  • SRA --> FASTQ:
  • SRA Toolkitfastq-dumpプログラムで可能。

  • SRA --> ABI:
  • SRA Toolkitabi-dumpプログラムで可能。

  • SRA --> qseq:
  • SRA Toolkitillumina-dumpプログラムで可能。

イントロ | ファイル形式の変換 | BAM --> BED

BAM形式のマッピング結果ファイル(拡張子が"bam"という前提です)を読み込んでBED形式に変換するやり方を示します。拡張子が"bed"の出力ファイルが自動生成されます。

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

1. sample_RNAseq1.bamの場合(GenomicAlignmentsパッケージ利用):

in_f <- "sample_RNAseq1.bam"           #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
hoge <- readGAlignments(in_f)          #BAM形式ファイルを読み込んだ結果をhogeに格納
hoge <- as.data.frame(hoge)            #データフレーム形式に変換

#本番(BED形式ファイルの最初の3列分に相当する情報を抽出)
tmp <- hoge[, c("seqnames","start","end")]#必要な列の情報のみ抽出した結果をtmpに格納

#ファイルに保存
out_f <- sub(".bam", ".bed", in_f)     #BED形式ファイル名を作成した結果をout_fに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
	

2. sample_RNAseq1.bamの場合(Rsamtoolsパッケージ利用):

in_f <- "sample_RNAseq1.bam"           #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
param_what <- c("rname", "pos", "qwidth", "strand")#左記の情報のみ読み込むという指令をparam_whatに格納
param_flag <- scanBamFlag(isUnmappedQuery=FALSE)#mappedされたもののみ読み込むという指令をparam_flagに格納
param_bam <- ScanBamParam(what=param_what, flag=param_flag)#BAM形式ファイルを読み込んだ結果をhogeに格納
hoge <- scanBam(in_f, param=param_bam)[[1]]#BAM形式ファイルを読み込んだ結果をhogeに格納

#ファイルに保存
tmp <- cbind(as.character(hoge$rname), #BED形式ファイルの1列目に相当する情報と
            hoge$pos,                  #BED形式ファイルの2列目に相当する情報と
            (hoge$qwidth+hoge$pos-1))  #BED形式ファイルの3列目に相当する情報を列方向で結合した結果をtmpに格納
out_f <- sub(".bam", ".bed", in_f)     #BED形式ファイル名を作成した結果をout_fに格納
write.table(tmp, out_f, sep="\t", append=F, quote=F, row.names=F, col.names=F)#tmpの中身を指定したファイル名で保存
	

イントロ | ファイル形式の変換 | FASTQ --> FASTA

Sanger FASTQ形式ファイルを読み込んでFASTA形式で出力するやり方を示します。 gzip圧縮FASTQファイルを読み込んでgzip圧縮FASTAファイル出力することもできます(WindowsはできるがMacはできないらしい)。

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

1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 配列長が同じであることが既知の場合です。

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

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

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

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

2. 配列長が異なるsample2.fastqの場合:

うまくいかない例です

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

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

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

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

3. 配列長が異なるsample2.fastqの場合:

うまくいく例です。

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

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

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
sread(fastq)                           #配列情報を表示

#本番
fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
names(fasta) <- id(fastq)              #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)。 配列長が同じであってもreadFastq関数で読み込むことができます。

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

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

#入力ファイルの読み込み
fastq <- readFastq(in_f)               #in_fで指定したファイルの読み込み
sread(fastq)                           #配列情報を表示

#本番
fasta <- sread(fastq)                  #fastqの配列情報部分をfastaに格納
names(fasta) <- id(fastq)              #description情報部分をfastaに追加
fasta                                  #確認してるだけです

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

5. サンプルデータ7のgzip圧縮FASTQ形式ファイル(SRR037439.fastq.gz)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 配列長が同じであることが既知の場合です。 gzip圧縮FASTQファイルを読み込んで非圧縮FASTAファイルで出力するやり方です。

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

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

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

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

6. サンプルデータ7のgzip圧縮FASTQ形式ファイル(SRR037439.fastq.gz)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 配列長が同じであることが既知の場合です。 gzip圧縮FASTQファイルを読み込んでgzip圧縮FASTAファイルで出力するやり方です。

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

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

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

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

イントロ | ファイル形式の変換 | Genbank --> FASTA

Genbank形式ファイルを読み込んでFASTA形式で出力するやり方を示します。

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

1. NM_138957.gbkの場合:

NM_138957のページからGenbank形式で保存したものですが、 デフォルトの拡張子が.gbではうまく保存できなかったので*.gbkと変更しています。

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

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

#本番
gb2fasta(source.file=in_f, destination.file=out_f)#in_fで指定したファイルを読み込んでout_fで指定したファイルで出力
	

イントロ | ファイル形式の変換 | GFF3 --> GTF

GFFはGeneral Feature Formatの略で、version 3とversion 2があります。 私の認識では、version 3がGFF3で、version 2がGTFです。しかしながら、GFF version 2を少し改良したものがGTF形式という意見もあるようです。 ここでは、rtracklayerパッケージを用いて、GFF3形式ファイルを読み込んでGTF形式(GFF version 2)で出力するやり方を示します。

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

1. Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3の場合:

出力ファイルはhoge1.gtfです。

in_f <- "Lactobacillus_hokkaidonensis_jcm_18461.GCA_000829395.1.30.chromosome.Chromosome.gff3"#入力ファイル名を指定してin_fに格納
out_f <- "hoge1.gtf"                   #出力ファイル名を指定してout_fに格納

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

#本番
export(import(in_f), out_f, format="gtf")#GTFに変換
	

イントロ | ファイル形式の変換 | qseq --> FASTA

Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

*_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。

FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイルとなります。

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

1. description行が"kkk_..."のようにしたい場合:

out_f <- "hoge1.fasta"                 #出力ファイル名を指定してout_fに格納
param1 <- "kkk"                        #description行に記述する内容

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[9] <- c("DNAString")        #9列目が"DNAString"だという情報を与えている
fasta <- readXStringColumns(getwd(), pattern="", colClasses = colClasses)[[1]]#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をfastaに格納
names(fasta) <- paste(param1, 1:length(fasta), sep="_")#description部分を作成している
fasta                                  #確認してるだけです

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

2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

つまり、descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すということ。

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

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(description) #型変換をしている

#本番(FASTA形式のオブジェクトに変換)
fasta <- hoge[[5]]                     #配列情報部分をfastaに格納
names(fasta) <- description            #description情報部分をfastaに追加
fasta                                  #確認してるだけです

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

イントロ | ファイル形式の変換 | qseq --> Illumina FASTQ

Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

*_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。 尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。 また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。 FASTQ形式といっても様々なバリエーション(Illumina FASTQやSanger FASTQなど)があります。 Illumina *_qseq.txt中のquality scoreの値をそのまま用いてFASTQ形式で保存すればIllumina FASTQ形式ファイルとなります。

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

1. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

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

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(description) #型変換をしている

#本番(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしつつ、一番右側に"/2"の記述を追加したい場合:

writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
param <- "/2"                          #description行に追加したい情報を格納

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(paste(description, param, sep=""))#paramで指定した記述内容を追加している

#本番(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[5]], hoge[[6]], description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

イントロ | ファイル形式の変換 | qseq --> Sanger FASTQ

Illuminaの*_qseq.txtファイル群がおさめられている(例:s_1_1_0005_qseq.txts_1_1_0015_qseq.txtの二つのファイルを含む; それぞれ114行および73行からなる)フォルダを指定して読み込むやり方を示します。

*_qseq.txtファイルは全部で11列あり、9列目が塩基配列情報、10列目がquality情報を含んでいます。 尚、指定したディレクトリ中に*_qseq.txtという形式のファイルしかなく、全てのファイルを取り扱いたいという前提となっています。また、descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしています。

2013/08/18までは、例えば「Illumina ASCII 64」に相当する"@"を「Sanger ASCII 33」に相当する"!"などと一文字づつ変換していましたが、forループを用いて一度に変換する美しいスクリプトに変更しました。

基本的にはIllumina ASCIIコードに「-31」することでSanger ASCIIコードに変換できるので、Phred score = 0に相当する「Illumina ASCII 64」から、Phred score = 61に相当する「Illumina ASCII 126」までの範囲をSanger ASCIIコードに変換しています。

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

1. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしたい場合:

descriptionのところをqseq形式ファイルの「3列目(レーン番号)」:「4列目」:「5列目」:「6列目」:「11列目(pass filterフラグ情報)」で表すやり方です。 writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

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

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(description) #型変換をしている

#本番(Illumina qualityスコアをSanger qualityスコアに変換)
qscore <- hoge[[6]]                    #readのquality情報部分をqscoreに格納
for(i in 64:126){                      #Illumina ASCIIコードの64-126の範囲をSanger ASCIIコードの33-95に変換するループ
   qscore <- chartr(rawToChar(as.raw(i)), rawToChar(as.raw(i - 31)), qscore)#qscore中の文字列を置換(as.raw関数で整数をASCIIコードに変換し、rawToChar関数でASCIIコードをASCII文字に変換しています)
}

#後処理(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[5]], qscore, description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

2. descriptionのところが通常のqseq2fastq.plの出力結果とほぼ同等の形式にしつつ、一番右側に"/2"の記述を追加したい場合:

writeFastq関数のデフォルトオプションはcompress=Tで、gzip圧縮ファイルを出力します。 ここではcompress=Fとして非圧縮ファイルを出力しています。

out_f <- "hoge2.fastq"                 #出力ファイル名を指定してout_fに格納
param <- "/2"                          #description行に追加したい情報を格納

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

#入力ファイルの読み込み
colClasses <- rep(list(NULL), 11)      #DNAStringSetというオブジェクト形式にするための情報を予め作成している。初期値として全11列に"NULL"を与えている
colClasses[c(3:6,9:11)] <- c("BString","BString","BString","BString","DNAString", "BString", "BString")#DNAStringSetというオブジェクト形式にするための情報を予め作成している。例えば9列目が"DNAString"だという情報を与えている
hoge <- readXStringColumns(getwd(), pattern="", colClasses=colClasses)#colClassesで指定した列を読み込んでXStringSetオブジェクトにした結果をhogeに格納

#前処理(description部分を作成)
description <- paste(hoge[[1]], hoge[[2]], hoge[[3]], hoge[[4]], hoge[[7]], sep=":")#description部分を作成している
description <- BStringSet(paste(description, param, sep=""))#paramで指定した記述内容を追加している

#本番(Illumina qualityスコアをSanger qualityスコアに変換)
qscore <- hoge[[6]]                    #readのquality情報部分をqscoreに格納
for(i in 64:126){                      #Illumina ASCIIコードの64-126の範囲をSanger ASCIIコードの33-95に変換するループ
   qscore <- chartr(rawToChar(as.raw(i)), rawToChar(as.raw(i - 31)), qscore)#qscore中の文字列を置換(as.raw関数で整数をASCIIコードに変換し、rawToChar関数でASCIIコードをASCII文字に変換しています)
}

#後処理(FASTQ形式のオブジェクトに変換)
fastq <- ShortReadQ(hoge[[5]], qscore, description)#ReadFastQ関数を用いてReadFastQというクラスオブジェクトを一から作成したものをfastqに格納
sread(fastq)                           #配列情報を表示
quality(fastq)                         #quality情報を表示
id(fastq)                              #description情報を表示

#ファイルに保存
writeFastq(fastq, out_f, compress=F)   #fastqの中身を指定したファイル名で保存
	

前処理 | クオリティコントロール | について

数億~数十億リードからなるNGSデータの全体的な精度チェック、クオリティの低いリードのフィルタリング、 リードに含まれるアダプター/プライマー配列(adapters/primers)やクオリティの低い配列部分の除去(トリミング; trimming)などを実行する様々な方法をリストアップします。 Krakenなどアダプター配列除去などが行えるものも含みます。

R以外:

Review、ガイドライン、パイプライン系:

前処理 | クオリティチェック | QuasR(Gaidatzis_2015)

QuasRパッケージを用いてQCレポートファイルを出力するやり方を示します。 FastQCのR版のようなものです。 qrqcよりも相当ストイックな出力結果です...。

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

1. サンプルデータ7のgzip圧縮FASTQ形式ファイル(SRR037439.fastq.gz)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

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

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

#本番
qQCReport(in_f, pdfFilename=out_f)     #pdfレポートファイルの作成
	

2. サンプルデータ7の非圧縮FASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。

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

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

#本番
qQCReport(in_f, pdfFilename=out_f)     #pdfレポートファイルの作成
	

3. FASTQ形式ファイル(SRR609266.fastq.gz)の場合:

カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013; 約375MB)です。

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

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

#本番
qQCReport(in_f, pdfFilename=out_f)     #pdfレポートファイルの作成
	

4. FASTQ形式ファイル(SRR616268sub_1.fastq.gz)の場合:

乳酸菌RNA-seqデータSRR616268の最初の100万リード分(約73MB)です。

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

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

#本番
qQCReport(in_f, pdfFilename=out_f)     #pdfレポートファイルの作成
	

前処理 | クオリティチェック | qrqc

FastQCのR版のようなものです。 Sanger FASTQ形式ファイルを読み込んで、positionごとの「クオリティスコア(quality score)」、 「どんな塩基が使われているのか(base frequency and base proportion)」、「リード長の分布」、 「GC含量」、「htmlレポート」などを出力してくれます。

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

1. サンプルデータ7のFASTQ形式ファイル(SRR037439.fastq)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです (Bullard et al., 2010)。 下記を実行すると「SRR037439-report」という名前のフォルダが作成されます。 中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。

in_f <- "SRR037439.fastq"              #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
fastq <- readSeqFile(in_f, quality="sanger")#in_fで指定したファイルの読み込み

#本番
makeReport(fastq)                      #htmlレポートの作成
	

2. サンプルデータ25のFASTQ形式ファイル(SRR633902_1_sub.fastq)の場合:

SRR633902から得られるFASTQファイルの最初の2,000行分を抽出したヒトデータです (Chan et al., Hum. Mol. Genet., 2013)。 下記を実行すると「SRR633902_1_sub」という名前のフォルダが作成されます。中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。 「Error : Insufficient values in manual scale. 2 needed but only 1 provided.」というエラーが出ることは確認済みですが、htmlファイルは作成されます。

in_f <- "SRR633902_1_sub.fastq"        #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
fastq <- readSeqFile(in_f, quality="sanger")#in_fで指定したファイルの読み込み

#本番
makeReport(fastq)                      #htmlレポートの作成
	

3. FASTQ形式ファイル(SRR609266_sub.fastq)の場合:

前処理 | フィルタリング | 任意のリード(サブセット)を抽出の8を実行して得られた カイコsmall RNA-seqデータ(Nie et al., BMC Genomics, 2013; 100000リード; 約16MB)です。 下記を実行すると「SRR609266_sub」という名前のフォルダが作成されます。中にあるreport.htmlをダブルクリックするとhtmlレポートを見ることができます。 元のgzip圧縮FASTQファイルはNCBI SRAから取得したものであるため、本来はSanger Quality Scoreなはずです。 つまり、readSeqFile関数で読み込む際のデフォルトはquality="sanger"でよいはずです。 しかし、スコア分布的に用いたIllumina pipelineのバージョンが 1.3から1.7なんじゃないかなと思った(スコア分布が概ね30-40近辺にあるはずだという思想)ので、+33のSangerではなく+64のilluminaに独断で行っています。 このあたりの判定は現実問題としては、結構厄介です(Cock et al., 2010)。

in_f <- "SRR609266_sub.fastq"          #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
fastq <- readSeqFile(in_f, quality="illumina")#in_fで指定したファイルの読み込み

#本番
makeReport(fastq)                      #htmlレポートの作成
	

4. サンプルデータ7のgzip圧縮FASTQ形式ファイル(SRR037439.fastq.gz)の場合:

SRR037439から得られるFASTQファイルの最初の2,000行分を抽出したMAQC2 brainデータです(Bullard et al., 2010)。 gzip圧縮ファイルの入力に対応していないのでエラーが出ます。

in_f <- "SRR037439.fastq.gz"           #入力ファイル名を指定してin_fに格納

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

#入力ファイルの読み込み
fastq <- readSeqFile(in_f, quality="sanger")#in_fで指定したファイルの読み込み

#本番
makeReport(fastq)                      #htmlレポートの作成
	

4. FASTQ形式ファイル(SRR616268sub_1.fastq.gz)の場合