У меня есть вектор, например 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) то есть ужасно неэффективный способ достижения результата
, поэтому приветствуются любые лучшие решения.