我有以下载体
x <- c(1,3,4,5,8,9,10,13)
我希望将其转换为一组间隔:
iwant <- list(1, c(3,5), c(8,10), 13)
iwant
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [1] 3 5
#>
#> [[3]]
#> [1] 8 10
#>
#> [[4]]
#> [1] 13
有一种简单的方法可以将x
转换成间隔组
R中的范围或Rcpp(真实x
向量可能有多达~80M的值),我完全错过了?如果没有,有人可以指出我的算法,我似乎无法弄明白。
答案 0 :(得分:2)
目前尚不清楚您希望如何做,但是在这里您可以重现预期的结果:
lapply(split(x,c(0,cumsum(diff(x)!=1))),
function(y)if(length(y)>2) c(y[1],tail(y,1))else y)
$`0`
[1] 1
$`1`
[1] 3 5
$`2`
[1] 8 10
$`3`
[1] 13
答案 1 :(得分:1)
我不完全确定你是如何定义间隔的实例的,但是使用IRanges包(installation instructions)是一种方式。它有很好的文档。
require(IRanges)
reduce(IRanges(x, x))
# IRanges of length 4
# start end width
# [1] 1 1 1
# [2] 3 5 3
# [3] 8 10 3
# [4] 13 13 1