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