R语言如何通过循环模拟筛选符合间隔规则的元素并计算总和
实现思路
你生成的total是全局升序排列的,所以相邻组的差值要求可以简化为:下一组的首个元素 > 上一组的最后一个元素 + 1,只要满足这个条件,两组所有元素的差值都会大于1。我们可以通过循环迭代查找符合要求的分组,直到剩余元素不足5个为止。
完整实现代码
# 生成原始数据 set.seed(50) a = sort(runif(10, 0, 1)) b = sort(runif(30, 1, 4)) total = c(a, b) # 初始化变量 n <- length(total) selected <- c() current_start <- 1 # 循环查找符合规则的分组 while (current_start + 4 <= n) { # 取当前组的5个元素索引 current_group_idx <- current_start:(current_start + 4) selected <- c(selected, current_group_idx) # 获取当前组的最大值 last_val <- total[current_start + 4] # 查找下一组的起始位置:第一个大于last_val + 1的元素索引 next_start <- which(total > last_val + 1)[1] # 无符合条件的元素则退出循环 if (is.na(next_start)) break current_start <- next_start } # 计算选中元素的总和 result_sum <- sum(total[selected]) print(result_sum) # 可打印选中的索引验证匹配示例 print(selected)
结果验证
运行代码后打印的选中索引为1 2 3 4 5 11 12 13 14 15 27 28 29 30 31,和你给出的示例完全匹配,最终总和计算结果为20.66891。
内容的提问来源于stack exchange,提问作者yoyo
相关产品推荐
相关产品推荐

