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

在R语言中从数组列表筛选元素和最小的最优数组

解决方法:从数组列表中选出元素和最小的最优数组

首先,你的需求核心是找到列表中所有元素总和最小的数组,我们可以通过计算每个数组的总和,再定位到总和最小的那个元素来实现。下面分两种场景给出方案:

1. 基础场景:直接选出最优数组

先给你一个简单的实现,不需要复杂循环就能完成需求:

# 先定义你的数据(和你提供的一致)
v1 = c(5,5,5,5) 
v2 = c(6,6,6,6) 
v3 = c(7,7,7,7) 
v4 = c(8,8,8,8) 
v5 = c(1,1,1,1) 
v6 = c(2,2,2,2) 
v7 = c(3,3,3,3) 
v8 = c(4,4,4,4) 
arr1 = array(c(v1,v2,v3,v4), dim = c(4,4)) 
arr2 = array(c(v5,v6,v7,v8), dim = c(4,4)) 
myList = list(arr1,arr2)

# 计算每个数组的元素总和
sum_list <- lapply(myList, sum)

# 找到总和最小的数组的索引
min_index <- which.min(unlist(sum_list))

# 提取最优数组
best_array <- myList[[min_index]]

# 验证一下:输出最优数组的总和和数组本身
cat("最优数组的总和:", sum(best_array), "\n")
print(best_array)

这段代码会输出arr2,因为它的总和是1+1+1+1 + 2+2+2+2 + 3+3+3+3 +4+4+4+4 = 40,而arr1的总和是5*4 +6*4 +7*4 +8*4= 104,显然arr2是最优的。

2. 适配你提到的循环场景

你提到要在类似while(length(A...的循环中完成,假设你的循环是要持续处理列表(比如每次选出最优数组后,可能移除它或者做其他操作),可以把逻辑整合到循环里:

solve <- function() {
  A <- myList
  # 假设循环条件是列表长度大于0,你可以根据实际需求修改
  while(length(A) > 0) {
    # 计算当前列表中每个数组的总和
    current_sums <- sapply(A, sum)
    # 找到当前最优数组的索引
    current_min_idx <- which.min(current_sums)
    current_best <- A[[current_min_idx]]
    
    # 这里可以添加你需要对最优数组执行的操作,比如打印、存储、处理等
    cat("当前最优数组总和:", sum(current_best), "\n")
    print(current_best)
    
    # 示例:移除当前最优数组,继续循环(根据你的实际需求调整这一步)
    A <- A[-current_min_idx]
  }
}

# 调用函数
solve()

关键函数说明

  • sum():计算单个数组的所有元素总和,因为数组本质是多维向量,sum()会直接把所有元素加起来。
  • lapply()/sapply():遍历列表中的每个数组,分别计算总和。sapply()会返回一个向量,比lapply()的列表结果更方便用which.min()处理。
  • which.min():返回向量中最小值的位置索引,用这个索引就能从列表中提取对应的最优数组。

如果你的循环有特殊的终止条件或者处理逻辑,只需要修改while的判断条件和循环内的操作即可。

内容的提问来源于stack exchange,提问作者Branislav Kramár

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:36:38