我拿了那个矩阵并检查了重叠,其中只有五个有任何重叠的间隔,没有一个有 2 个,假设它们是按起始位置排序的:
> sum( mat[1:28,2] > mat[2:29,1] )
[1] 5
> sum( mat[1:27,2] > mat[3:29,1] )
[1] 0
那么它们是哪些?
> which( mat[1:28,2] > mat[2:29,1] )
[1] 19 21 23 25 28
因此,创建一个包含 2300 万个项目的向量似乎相当浪费机器资源和时间,而简单地构建一个函数来计算任何特定位置所在的区间数会容易得多:
fchunk <- function(pos) {sum( mat[ , 1] <= pos & mat[,2] >= pos)}
#--------
> fchunk(16675330)
[1] 2
> fchunk(16675329)
[1] 1
这些是有 2 个的区间:
sapply( which( mat[1:28,2] > mat[2:29,1] ) ,
function(int1) c( mat[int1+1, 1], mat[int1, 2] ) )
#--------
[,1] [,2] [,3] [,4] [,5]
n7 16675330 18097680 20233612 21288777 22847516
n8 16724700 18445265 20741145 22780817 22967567