符合特定条件的向量拆分:编写R代码生成重叠子向量
满足指定条件的向量拆分R代码实现
需求条件
- 每个子向量长度均为
l,且l小于父向量v的长度; - 每个子向量由连续元素组成,且元素组合唯一;
- 子向量之间存在元素重叠;
- 子向量的起始元素位置不可被
l整除(如l=3时,起始位置不能是3、6、9…); - 输入为向量
v和整数l,输出为子向量组成的列表(非矩阵)。
实现代码
split_vector <- function(v, l) { # 参数合法性检查 if (l >= length(v)) { stop("参数l必须小于父向量v的长度") } # 生成所有符合要求的起始位置:排除能被l整除的位置 total_possible_starts <- 1:(length(v) - l + 1) invalid_starts <- seq(from = l, to = max(total_possible_starts), by = l) valid_starts <- setdiff(total_possible_starts, invalid_starts) # 生成子向量列表 lapply(valid_starts, function(start) { v[start:(start + l - 1)] }) }
示例验证
以v = c(1,2,3,4,5,6,7,8,9,10)、l=3为例,调用函数:
v <- c(1,2,3,4,5,6,7,8,9,10) l <- 3 result <- split_vector(v, l) print(result)
输出结果:
[[1]] [1] 1 2 3 [[2]] [1] 2 3 4 [[3]] [1] 4 5 6 [[4]] [1] 5 6 7 [[5]] [1] 7 8 9 [[6]] [1] 8 9 10
条件符合性说明
- 所有子向量长度均为3,且3 < 10,满足条件1;
- 所有子向量由连续元素组成,且每个组合唯一,满足条件2;
- 相邻子向量均存在元素重叠(如
1,2,3与2,3,4重叠2个元素),满足条件3; - 起始位置为1、2、4、5、7、8,均不被3整除,满足条件4;
- 输出为标准R列表,满足条件5。
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

