【发布时间】:2020-09-10 23:17:06
【问题描述】:
给定 vec <- 1:n 和 l 的向量作为子向量长度,我想要一个 R 函数将向量分解为子向量。当l 为偶数时,此R 函数有效。
splitWithOverlap <- function(vec, seg.length, overlap) {
starts = seq(1, length(vec) - 1, 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]])
}
## try the function
vec <- 1:17
l <- 6
ov = ceiling(l/2)
splitWithOverlap(vec, l, ov)
问题是当l 是奇数时,无法找到中途。 l 奇数的解决方案可以通过告诉 R 在 ov = ceiling(l/2) 和 ov = ceiling(l/2) - 1 之间交替来解决,这样我就会得到类似 Figure 2 或 Figure 4。
【问题讨论】:
-
如果你只需要在
ceiling(l/2)为偶数和ceiling(l/2)-1为奇数之间切换,你可以将重叠的计算移到函数中,并使用模来检查l是偶数还是奇怪的。l%%2==0对偶数为 TRUE。 -
请进行更好的演示!