Предположим, у меня есть вектор от 1 до 10, и я хочу разделить его на подвекторы следующих двух условий:
равной длины 3.
с перекрытием 1.
Я получил почти готовый ответ Разделенный вектор с перекрывающимися выборками в R с функцией, которую я изменил ниже:
splitWithOverlap <- function(vec, seg.length, overlap) {
starts = seq(1, length(vec), by=seg.length-overlap)
ends = starts + seg.length - 1
ends[ends > length(vec)] = length(vec)
lapply(1:length(starts), function(i) vec[starts[i]:ends[i]])
}
> splitWithOverlap(1:10, 3, 2)
, который произвел
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 2 3 4
#[[3]]
#[1] 3 4 5
#[[4]]
#[1] 4 5 6
#[[5]]
#[1] 5 6 7
#[[6]]
#[1] 6 7 8
#[[7]]
#[1] 7 8 9
#[[8]]
#[1] 8 9 10
#[[9]]
#[1] 9 10
#[[10]]
#[1] 10
, что я хочу, это
#[[1]]
#[1] 1 2 3
#[[2]]
#[1] 2 3 4
#[[3]]
#[1] 3 4 5
#[[4]]
#[1] 4 5 6
#[[5]]
#[1] 5 6 7
#[[6]]
#[1] 6 7 8
#[[7]]
#[1] 7 8 9
#[[8]]
#[1] 8 9 10
, потому что оба условия математически выполнены, number of blocks = vector length - subvector length + 1
(10 - 3 + 1
) = 8, а не 10
Я хочу изменить функцию, чтобы она остановилась на подвекторе 8.