2

R iRanges で重複する範囲を一般的に見つけることに関する他の投稿を見つけましたが、この余分なちょっとしたひねりを手伝ってもらえますか: リンクされている 2 つの範囲 (開始範囲と終了範囲を持つゲノム再編成の可能性) があり、マザーゲノムの同じ範囲を除外する

以下のように停止と開始の範囲を見つけました (chr 番号、間隔の開始、間隔の終了)。左側の 3 列は再配置の開始を示し、右側の 3 列は再配置の終了を示します (それらはSVDetect と呼ばれるプログラムの出力であり、NGS データを使用して参照ゲノムとの異常なアラインメントを持つメイト ペアを検出します)。母クローンと娘の 2 つのゲノムがあり、娘に固有の再編成を見つけたいと考えています = 両方の範囲が別の範囲の 2 つの範囲の同じ行と重複する行を除外したいと考えています。範囲は少し異なるかもしれませんが、両方の範囲が重なっている場合は、再編成が母親にすでに存在していたことを強く示しています.

娘:

1  1384138 1384862 - 1  516731  516918
2  3758860 3759278 - 2  879828  879966 # (filter away this line as overlap with below)
2  3940051 3940470 - 2  3940856 3941250

母親:

2  3758858 3759282 - 2  879828  879966 # (overlap with this range)
1  1384138 1384862 - 3  116231  516918
2  3940051 3940470 - 3  1540856 3941250
4

1 に答える 1

0

トリックは、2 つの GRanges のセット (1 つは再配置開始用、もう 1 つは再配置終了用) を使用し、次のように結果を結合することです。

### Create GRanges for daughter - copied from example
daughterStart <- GRanges(c(1,2,2), IRanges(c(1384138,3758860,3940051), c(1384862,3759278,3940470)))
daughterEnd <- GRanges(c(1,2,2), IRanges(c(516731,879828,3940856), c(516918,879966,3941250)))

### Create GRanges for mother - copied from example
motherStart <- GRanges(c(2,1,2), IRanges(c(3758858,1384138,3940051), c(3759282,1384862,3940470)))
motherEnd <- GRanges(c(2,3,3), IRanges(c(879828,116231,1540856), c(879966,516918,3941250)))

次に、娘の再編成が母親の再編成とオーバーラップするかどうかを尋ねているため、クエリとして娘を使用して findOverlaps() 関数を使用してオーバーラップがあるかどうかを識別します (GRanges は異なる seqlevel (染色体) を持ち、それによって警告) :

starOverlap <- suppressWarnings( findOverlaps(query = daughterStart, subject = motherStart) ) # suppressWarnings to ignore wanings about different chromosomes
endOverlap  <- suppressWarnings( findOverlaps(query = daughterEnd,   subject = motherEnd  ) )

そして最後に、再配置開始と再配置終了のオーバーラップに同一のオーバーラップがあるかどうかを識別します。

> starOverlap %in% endOverlap
[1] FALSE  TRUE FALSE

! を追加するだけで、重複していない娘のペアのインデックスを取得するために使用できます。

> starOverlap@queryHits[ ! (starOverlap %in% endOverlap) ]
[1] 1 3

このアプローチは findOverlaps に依存しており、ベクトル化されているため、数百万回の再配置まで高速になります。

于 2014-12-19T14:48:26.890 に答える