R语言如何循环实现数组连续子集筛选并统计迭代次数
R语言循环实现迭代筛选与计数
不需要重复编写冗余的单步操作代码,用while循环即可自动完成全流程迭代,自动统计迭代次数。
完整可运行代码
# 初始待处理矩阵 ar <- structure(c(0, 11, 17, 15, 22, 67, 73, 68, 31, 31, 28, 33, 34, 32, 11, 0, 9, 12, 21, 67, 73, 67, 35, 30, 34, 67, 60, 36, 17, 9, 0, 6, 19, 70, 74, 68, 36, 36, 36, 64, 66, 39, 15, 12, 6, 0, 13, 64, 69, 66, 34, 37, 39, 77, 65, 45, 22, 21, 19, 13, 0, 59, 60, 66, 38, 39, 39, 40, 43, 43, 67, 67, 70, 64, 59, 0, 10, 18, 77, 75, 78, 93, 93, 85, 73, 73, 74, 69, 60, 10, 0, 15, 76, 74, 80, 103, 101, 95, 68, 67, 68, 66, 66, 18, 15, 0, 59, 65, 73, 90, 87, 82, 31, 35, 36, 34, 38, 77, 76, 59, 0, 8, 19, 24, 28, 32, 31, 30, 36, 37, 39, 75, 74, 65, 8, 0, 12, 20, 22, 23, 28, 34, 36, 39, 39, 78, 80, 73, 19, 12, 0, 6, 14, 18, 33, 67, 64, 77, 40, 93, 103, 90, 24, 20, 6, 0, 2, 8, 34, 60, 66, 65, 43, 93, 101, 87, 28, 22, 14, 2, 0, 6, 32, 36, 39, 45, 43, 85, 95, 82, 32, 23, 18, 8, 6, 0), .Dim = c(14L, 14L)) # 初始化:当前处理矩阵设为初始矩阵,迭代计数器置0 current <- ar iter_num <- 0 # 循环终止条件:当前矩阵行数为0(空集) while (nrow(current) > 0) { iter_num <- iter_num + 1 # 复现单步操作逻辑 col_less25_count <- colSums(current < 25) target_col <- which.max(col_less25_count) current <- current[current[, target_col] > 25, , drop = FALSE] } # 打印结果 cat("总迭代次数:", iter_num, "\n")
代码说明
- 逻辑完全对齐手动操作流程:每轮统计每列中数值小于25的元素个数,选择计数最高的列,筛选保留该列数值大于25的行,作为下一轮的输入矩阵
- 保留
drop = FALSE参数,避免筛选到单行/空结果时矩阵结构退化为向量,导致后续循环报错 - 针对给出的测试数据运行代码,会输出
总迭代次数:3,和手动统计结果完全匹配
内容的提问来源于stack exchange,提问作者Juan Almeira
相关产品推荐
相关产品推荐

