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

如何通过循环对minDist列表组使用which.min函数实现分组

批量处理多个minDist列表获取分组结果

你已经知道如何对单个minDist矩阵用apply(minDist, 1, which.min)获取每行的分组(取最小值所在列),要批量处理3个这类矩阵,有两种简洁的实现方式,下面结合你提供的数据来演示:

首先构造你的3个minDist矩阵列表

先把你给出的3组数据整理成R的列表结构:

minDist_list <- list(
  # 第1个minDist矩阵
  matrix(c(1.000000,9.055385,9.000000,
           0.000000,9.000000,9.055385,
           1.414214,8.062258,8.000000,
           1.000000,8.000000,8.062258,
           9.055385,1.000000,0.000000,
           9.000000,0.000000,1.000000,
           10.049876,1.414214,1.000000,
           10.000000,1.000000,1.414214,
           5.000000,5.830952,6.403124,
           5.656854,6.403124,7.071068), 
         nrow=10, byrow=TRUE),
  # 第2个minDist矩阵
  matrix(c(10.000000,10.049876,9.055385,
           10.049876,10.000000,9.000000,
           9.000000,9.055385,8.062258,
           9.055385,9.000000,8.000000,
           1.000000,1.414214,1.000000,
           1.414214,1.000000,0.000000,
           0.000000,1.000000,1.414214,
           1.000000,0.000000,1.000000,
           7.211103,6.708204,5.830952,
           7.810250,7.211103,6.403124), 
         nrow=10, byrow=TRUE),
  # 第3个minDist矩阵
  matrix(c(0.000000,1.000000,9.055385,
           1.000000,1.414214,9.000000,
           1.000000,0.000000,8.062258,
           1.414214,1.000000,8.000000,
           9.000000,8.000000,1.000000,
           9.055385,8.062258,0.000000,
           10.000000,9.000000,1.414214,
           10.049876,9.055385,1.000000,
           5.656854,5.000000,5.830952,
           6.403124,5.830952,6.403124), 
         nrow=10, byrow=TRUE)
)

方法1:用lapply批量处理(R风格推荐)

lapply可以直接遍历列表中的每个矩阵,对每个矩阵执行你已有的分组逻辑,代码简洁高效:

# 批量生成所有分组结果
all_groupings <- lapply(minDist_list, function(x) apply(x, 1, which.min))

# 查看第1个列表的分组结果(和你给出的示例一致)
all_groupings[[1]]
# 输出:[1] 1 1 1 1 3 2 3 2 1 1

方法2:用for循环处理(直观易懂)

如果你更习惯传统循环写法,可以先初始化空列表存储结果,再逐个处理:

# 初始化空列表用于存储结果
all_groupings <- list()

# 循环处理每个minDist矩阵
for(i in seq_along(minDist_list)){
  all_groupings[[i]] <- apply(minDist_list[[i]], 1, which.min)
}

# 查看第2个列表的分组结果
all_groupings[[2]]

两种方法最终都会得到一个包含3个向量的列表all_groupings,每个向量对应原minDist列表中对应矩阵的每行分组(最小值所在的列索引)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:23