【发布时间】:2019-10-09 16:51:30
【问题描述】:
假设我有一个 1 到 10 的向量,并希望将其拆分为以下两个条件的子向量:
-
长度为 3。
-
重叠为 1。
我得到了一个几乎完成的答案Split vector with overlapping samples in 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 处停止。
【问题讨论】: