:) Удачи!
я есть вектор, такой какc(1, 3, 4, 5, 9, 10, 17, 29, 30)
и я хотел бы сгруппировать «соседние» элементы, которые образуют регулярную последовательную последовательность в рваный вектор, что приводит к:
L1: 1
L2: 3,4,5
L3: 9,10
Л4: 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)
}
Теперь я понимаю, что
а) R не С (несмотря на фигурные скобки)
б) глобальные переменные - чистое зло
в) это ужасно неэффективный способ достижения результата
так что любые лучшие решения приветствуются.