IRange
可以寻找最近的两个范围和计算范围间的距离。
寻找最近范围
通过例子说明,首先建立query与subject范围对象:
> qry <- IRanges(start=6, end=13, name='query')
> sbj <- IRanges(start=c(2, 4, 18, 19), end=c(4, 5, 21, 24), names=1:4)
> qry
IRanges object with 1 range and 0 metadata columns:
start end width
<integer> <integer> <integer>
query 6 13 8
> sbj
IRanges object with 4 ranges and 0 metadata columns:
start end width
<integer> <integer> <integer>
1 2 4 3
2 4 5 2
3 18 21 4
4 19 24 6
确定最近范围的函数有nearest
, precede
, follow
,分别使用:
> nearest(qry, sbj)
[1] 2
> precede(qry, sbj)
[1] 3
> follow(qry, sbj)
[1] 2
三个函数的参数都是query对象与subject对象,它们都寻找与query的范围最近的subject的范围,返回结果代表最近subject范围坐标。区别在于(见图1):
-
nearest
在所有subject范围中寻找与query最近的范围, -
precede
只寻找在query前方最近的subject范围(坐标轴右方为前), - 而
follow
只寻找query后方最近的subject范围。 - 值得注意的是,
nearest
会返回与query重叠的subject范围,而precede
与follow
不会。
由于nearest
函数是向量化的,query对象可以包含多个范围,每个范围都会返回结果:
> qry <- IRanges(start=c(3,6), width=10, name='query')
> nearest(qry, sbj)
[1] 2 2
范围间距离
-
distanceToNearest
:返回与query最近的subject范围间的距离,例如> qry <- IRanges(sample(seq_len(1000), 5), width = 10) > sbj <- IRanges(sample(seq_len(1000), 5), width = 10) > qry IRanges object with 5 ranges and 0 metadata columns: start end width <integer> <integer> <integer> [1] 776 785 10 [2] 140 149 10 [3] 73 82 10 [4] 289 298 10 [5] 764 773 10 > sbj IRanges object with 5 ranges and 0 metadata columns: start end width <integer> <integer> <integer> [1] 920 929 10 [2] 713 722 10 [3] 292 301 10 [4] 943 952 10 [5] 204 213 10 > distanceToNearest(qry, sbj) Hits object with 5 hits and 1 metadata column: queryHits subjectHits | distance <integer> <integer> | <integer> [1] 1 2 | 53 [2] 2 5 | 54 [3] 3 5 | 121 [4] 4 3 | 0 [5] 5 2 | 41 ------- queryLength: 5 / subjectLength: 5
返回结果的形式与
findOverlaps
相似,前两列对应query坐标与subject坐标,第三列给出两个范围的距离。 -
distance
,此函数返回两个IRange对象配对范围间的距离:> distance(qry, sbj) [1] 134 563 209 644 550
可以发现不重叠的两个范围间的距离结果为“(前一个范围的start - 后一个范围的end) -1”。那么两个范围如果是连续的,其距离应该是0,例如
[2,3]
与[4,5]
间的距离是0:> distance(IRanges(2,3), IRanges(4,5)) [1] 0
查询说明文档,
IRange
是这样定义范围间的距离关系的:-
x, y 重叠 =>
distance(x, y) == 0
-
也就是说:x, y 相邻或者重叠 <=>
distance(x, y) == 0
-
网友评论