R関連(1) requireとlibraryの違い -パッケージのインポート
いろんなRの参考書を読んでいて疑問に思っていたのが、パッケージをインポートする際に、人によって「require」と「library」の異なる関数を利用していることです。
stackoverflowに同じ疑問点を質問している人がいたので紹介します。
結論から言って、「どっちもあんまり変わらない」そうです。
「require」は指定したパッケージが存在しない場合、警告文が出るが処理自体は止まらない。一方で、「library」は指定したパッケージが存在しない場合、エラーが起こり処理自体が止まるということでしょうか。
また、「require」を利用した場合、パッケージが存在しないと「logical」値を返すことから、以下のようにパッケージがない場合に自動的にパッケージをインストールしてくれるようにスクリプトを書くことができます。
※stackoverflowに書いてあったスクリプトをそのまま転載しています。
このスクリプトを実行すると、パッケージが存在する場合「True」を返し、パッケージがインポートされます。
一方、パッケージが存在しない場合「False」を返し、パッケージのインストールを試み、再度パッケージのインポートを試みます。それでもインポートできない(パッケージがCRANに存在しない)場合、エラーを知らせる文章を出力します。
人によっては「require」を好むようですね。
NGS関連(1) NGS解析用マッピングソフトの性能比較
ecSeq Bioinformaticsで紹介されていたNGS解析用マッピングソフトの性能比較に関する記事を読んだので、内容をまとめておこうと思います。
結論から言って、ecSeq Bioinformaticsが出しているデータを見る限り、単純な性能だけで見ると、
RNA-seqでは「STAR」
DNA-seqでは「BWA」
がベストチョイスというのが私の見解です。
まあ、STARは欠点もあるので考えものですが…。
NGS解析用マッピングソフトといえば、RNA-seqでは「Bowtie」、WGSなどのDNA-seqでは「BWA」を用いるのが一般的であるというのが以前からの私の認識でした。
しかし、近年ではENCODEプロジェクトで「Bowtie」よりもマッピングの精度が高い(らしい)「STAR」を使った例が出てくるなど、必ずしも「Bowtie」や「BWA」を使うことが本当にベストなのかとも思っていました。
ecSeq Bioinformaticsが上記の記事でその疑問に答えるデータを出してきています。
今回は、STARとBowtie(もしくはBWA)を比較してどちらが優れているかを見て行きたいと思います。
RNA-seq
True positive rate
Bowtie: 95.1%
STAR: 99.8%
Bowtieのほうがマッピング時の取りこぼしがやや多い傾向にあるようですね。
False positive
Bowtie: 122 hits
STAR: 167 hits
FPに関してはSTARのほうがややミスアライメントが起こる可能性がありそうです。ただ、122や167hitsは誤差範囲といったところでしょうか。
Use times
Bowtie: 32.63s
STAR: 3.31s
STARが圧倒的に早いですね!
データを高速に処理できるのは大きいメリットです。
メモリ消費量
Bowtie: 3.76GB
STAR: 28.12GB
STARはメモリをバカ食いする…。
このメモリ消費量は困りもの(>_<)
少なくともうちのラボにあるLinuxのデスクトップパソコンじゃ処理できないです。
結果をまとめると、STARは高い精度でマッピングが可能である点と、データを高速に処理できる点で他のマッピングソフトと比較して非常に優秀ではあります。
一方で、STARはメモリ消費量が異常に高く、一般的なデスクトップパソコンでは解析が困難であるという致命的な欠点を持ち合わせているようです。
スパコンを利用しておりメモリ使用量を十分に確保できる場合は、「STAR」がRNA-seq用のマッピングソフトとしてベストチョイスであるといえます。
ただ、一般的なデスクトップパソコンで解析しているユーザーにとっては「Bowtie」一択かなと思います(BWAも良さげですが)。
Tuxedoパイプライン(Bowtie-Tophat-Cufflinks)は導入が楽で使い勝手もいいので、あえてSTARやBWAを利用するのはめんどいかなと私なんかは思ってしまいます。 また、STARやBWAを単体だと、Exon-junctionをまたいでるリードはアライメントできないでしょうし。
DNA-seq
True positive rate
BWA-MEM: 98.6%
STAR: 99.3%
たいして変わりませんね。
False positive
BWA-MEM: 79 hits
STAR: 1139 hits
さすがはBWA。圧倒的にFPの数が少ないです。
Use times
Bowtie: 87.91s
STAR: 0.99s
STARが相変わらずの爆速。こんなに違うものなんですか。
メモリ消費量
Bowtie: 3.85GB
STAR: 28.12GB
やっぱり、STARはメモリ消費量が多いですね。
結果をまとめると、DNA-seq用のマッピングなら「BWA」一択でしょう。
DNA-seqに関しては、STARだとメモリ消費量も大きいし、False-positiveもやたら多いので選択肢に入ってこないかなと思います。
Rパッケージ(1) data.tableを利用したデータの読み込み・整形処理
Rでは「データフレーム」と呼ばれるExcelのワークシートのような行列形式のデータ構造を読み込むことができます。
Rではデフォルトで「read.table」関数が用意されており、テキストファイルからデータを読み込み、データフレームとしてファイルをインポートすることができます。
しかし、Rを使って大規模なデータをインポートする場合、「read.table」関数でファイルを読み込むと非常に時間がかかってしまうのがネックです。(インポートするファイルの大きさなどにも依存するが、10分以上かかることもある…。)
そこで、「data.table」パッケージの出番です!
このdata.tableパッケージを利用することで、例えば、前述したデータの読み込み速度はデフォルトの「read.table」と比較して10倍程度向上させることができます。それ以外にも、データの整形や集計などを高速で処理することのできる関数が用意されています。
似たようなパッケージとして「dplyr」がありますが、今回はRのデータフレームと似た機能を継承している「data.table」パッケージの使い方についてまとめてみたいと思います(データの読み込みと整形処理についてのみ)。
(1)data.tableパッケージのインストール・インポート
(2)データフレーム(データテーブル)の作成
data.frame()からできるデータフレームと、data.table()からデータテーブルは異なる型であることに注意。データを出力した時も形が少し異なります。
(3)データのインポート
データの取り込み方はdata.frame()とdata.table()とで変わりません。ただし、data.table()では「row.names」が指定できません。
(4)行の抽出
行の抽出方法に関しても、data.frame()とdata.table()とでほとんど変わりません。
(5)列の抽出
列の抽出に関してはdata.table() ではdata.frame()と異なり、with=Fを指定しておかないといけません(理由はよく理解できてません…)。
stackoverflowでもおなじ質問があるのでこちらも参照。
(6)複数の表の結合
表を縦に並べて結合する場合は、data.frame()ではrbindを使って変数を指定、data.table()では上記のやり方に加えてrbindlistを使って変数のリストを指定する方法があります。
stackoverflowでrbindlistのほうが高速であるとの記述がありました。
表を横に並べて 結合する場合は、data.frame()とdata.table()のいずれもcbindでOKです。こちらもdata.table()に関しては、変数のリストも指定することができます。
(7)ヘッダーの変更
ヘッダーの変更は、data.frame()では「names」もしくは「colnames」関数、data.table()では、「setnames」関数を用いて行うことができます。