我有两组 IRange 进行比较。我的目标是获得一个具有重叠位置的输出(如果存在重叠),并且如果它们不重叠,则将范围的偏移列为负开始。至少如果我无法获得偏移量,我希望获得一个“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 + 范围获取 hits 对象进行比较,但不知道如何组合结果以获得所需的输出。