Как разделить вектор на группы регулярных последовательных последовательностей?

У меня есть вектор, например c (1, 3, 4, 5, 9, 10, 17, 29, 30) , и я хотел бы сгруппировать вместе «соседние» элементы, которые образуют регулярную последовательную последовательность в неровном векторе, в результате чего получится:

L1: 1
{{ 1}} L2: 3,4,5
L3: 9,10
L4: 17
L5: 29,30

Наивный код (бывшего программиста C):

partition.neighbors <- function(v)
{
    result <<- list() #jagged array
    currentList <<- v[1] #current series

    for(i in 2:length(v))
    {
        if(v[i] - v [i-1] == 1)
        {
            currentList <<- c(currentList, v[i])
        }
        else
        {
            result <<- c(result, list(currentList))
            currentList <<- v[i] #next series
        }       
    }

    return(result)  
}

Теперь я понимаю, что

a) R не является C (несмотря на фигурные скобки)
b) глобальные переменные - чистое зло
c) то есть ужасно неэффективный способ достижения результата

, поэтому приветствуются любые лучшие решения.

14
задан Henrik 29 January 2017 в 12:49
поделиться