You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

符合特定条件的向量拆分:编写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

条件符合性说明

  1. 所有子向量长度均为3,且3 < 10,满足条件1;
  2. 所有子向量由连续元素组成,且每个组合唯一,满足条件2;
  3. 相邻子向量均存在元素重叠(如1,2,3与2,3,4重叠2个元素),满足条件3;
  4. 起始位置为1、2、4、5、7、8,均不被3整除,满足条件4;
  5. 输出为标准R列表,满足条件5。

内容的提问来源于stack exchange,提问作者Daniel James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:24