1

比較する IRanges のセットが 2 つあります。私の目標は、オーバーラップが存在する場合はオーバーラップの位置を持ち、オーバーラップしない場合は負の開始としてリストされている範囲のオフセットを持つ出力を取得することです。少なくとも、オフセットを取得できない場合は、オーバーラップがないことを示すために「0」を取得する必要があります。例えば:

xx<-IRanges(start=c(2,9,19,31,45), end=c(3,11,23,35,49))

        IRanges of length 5
     start end width
[1]      2   3     2
[2]      9  11     3
[3]     19  23     5
[4]     31  35     5
[5]     45  49     5

yy<-IRanges(start=c(4,10,19,33,45), end=c(5,13,25,38,48))

IRanges of length 5
     start end width
[1]      4   5     2
[2]     10  13     4
[3]     19  25     7
[4]     33  38     6
[5]     45  48     4

findOverlaps + 範囲を使用すると、次のようになります。

> fo <-findOverlaps(xx,yy)
> ranges(fo, xx, yy)
IRanges of length 4
    start end width
[1]    10  11     2
[2]    19  23     5
[3]    33  35     3
[4]    45  48     4

最終出力をデータフレームまたは次のようなものにしたいと思います。

       start end width
[1]     -1   0     0
[2]     10  11     2
[3]     19  23     5
[4]     33  35     3
[5]     45  48     4

countOverlaps を使用して重複する範囲のインデックスを取得し、findOverlaps + 範囲を使用して比較するためのヒット オブジェクトを取得できますが、結果を組み合わせて目的の出力を取得する方法について途方に暮れています。

4

2 に答える 2

2

pintersect必要なのは の関数だと思いますIRanges

library(IRanges)
xx <- IRanges(start=c(2,9,19,31,45), end=c(3,11,23,35,49))
yy <- IRanges(start=c(4,10,19,33,45), end=c(5,13,25,38,48))

pintersect(xx, yy)
# IRanges of length 5
#     start end width
# [1]     4   3     0
# [2]    10  11     2
# [3]    19  23     5
# [4]    33  35     3
# [5]    45  48     4

width= 0 はオーバーラップがないことを示します。

于 2015-12-30T01:49:22.843 に答える