R语言中如何在循环内定义可变长度的向量元素选择范围
R语言可变长度分段索引实现方法
核心思路是通过cumsum()函数计算各分段长度的累积值,直接推导每个迭代对应的索引上下界:
完整实现代码
vec <- c(50, 30, 20) # 预计算每个分段的结束索引 cum_end <- cumsum(vec) for (i in seq_along(vec)) { # 计算当前分段起始索引:第一个分段起始为1,后续分段为上一个分段结束索引+1 idx_min <- if (i == 1) 1 else cum_end[i-1] + 1 idx_max <- cum_end[i] # 此处可替换为你自己的逻辑,比如用 idx_min:idx_max 对目标向量做切片 print(paste0(idx_min, ":", idx_max)) }
运行输出
[1] "1:50" [1] "51:80" [1] "81:100"
简化写法(无需循环内判断)
可以提前计算好所有分段的起始索引,代码更简洁高效:
vec <- c(50, 30, 20) cum_end <- cumsum(vec) cum_start <- c(1, cum_end[-length(cum_end)] + 1) for (i in seq_along(vec)) { idx_range <- cum_start[i]:cum_end[i] print(paste0(min(idx_range), ":", max(idx_range))) }
注意:使用前建议先校验
sum(vec)和待切片的原始向量长度一致,避免出现索引越界问题。
内容的提问来源于stack exchange,提问作者nukubiho
相关产品推荐
相关产品推荐

