###やりたいこと
BEDGRAPHという形式のファイルを1つにまとめる必要があって、
bedtools unionbedg を走らせたものの、エラー連発。
エラーメッセージは下記のサイトの通り。
bedtools: unionBedGraphs.cpp:99: CHRPOS UnionBedGraphs::ConsumeNextCoordinate(): Assertion `!queue.empty()' failed.
どういうエラーなのかさっぱり理解できませんが、
質問に対する回答の文章を読むと、どうやらソートできていないとエラーになる様子。
###BEDGRAPHファイルのソート
自分のファイルがソートされたファイルであるかを確認します。
チェックは回答のコマンドをそのまま走らせる。
sort -c -k 1,1 -k 2,2n a.bedg
-c
はソート済みであるかの結果だけを返すオプションで、ソートは実行されません。
順序が不規則と出ました。なんでだろう…
とりあえず、ソートすれば解消できそうです。
実行するにあたり、上のコマンドをちょっと改変して、すでに存在する.bedgファイルを上書きしたいです。
sort -V -k 1,1 -k 2,2n -u a.bedg -o a.bedg
としてやれば良さげ。link参照
無事に並べ替えられたので、振り出しに戻ってunionbedgを実行します。
念のため、sort -c
して確認。今度は大丈夫。
###複数のBEDGRAPHファイルを1つのファイルにする
いよいよファイルを統合します。
使用するサブコマンドunionbedg
の説明はこちら。
bedtools unionbedg -header -names -filler NA -i a.bedg b.bedg
-filler
は値が存在しない時に代入する文字を指定できます。
出力結果にヘッダーを入れたい時は-header
、
列ごとの名前を別途入れたい場合は-names
というオプションもありますので、適宜選択ください。
####余談その1
bedtoolsにもsortするためのサブコマンドはありますから、好みで使われるのがいいと思います。
sortBedの説明はこちら。
ページの下部まで進むと、こんな記載があります。
Disclaimer: it should be noted that sortBed is merely a convenience utility, as the UNIX sort utility will sort BED files more quickly while using less memory.
シェルコマンドの方がよさげですね。。
####余談その2
まとめたいBEDGRAPHファイルにヘッダーが入っていると、ソートされていないとみなされてエラーになりました。
また、入力するBEDGRAPHファイル1つにつき1つの-names
しか対応しませんので、
一旦まとめたBEDGRAPHファイルをさらに統合する時は別の方法をとる必要がありそうです。
このパターンが多いと、bedtoolsは不向きかもしれません。。