R语言实现列表向量元素交叉组合求和并匹配指定输出顺序
R 语言实现列表向量按指定迭代顺序组合求和
你需要的遍历规则为首个向量下标迭代最慢、最后一个向量下标迭代最快,取所有下标组合对应元素求和,直接使用R内置函数即可稳定实现,输出顺序和手动枚举完全一致。
实现代码
# 测试输入列表 l <- list( a = c(1,2,3), b = c(10,4), c = c(8,5) ) # 核心逻辑:expand.grid默认第一个传入参数迭代最快、最后一个参数迭代最慢,反转列表传入刚好匹配需求 comb <- expand.grid(rev(l), KEEP.OUT.ATTRS = FALSE) # 对每一组组合求和,加法交换律不影响求和结果,无需调整列顺序 result <- rowSums(comb)
结果验证
运行后输出的result完全匹配预期:
> result [1] 19 16 13 10 20 17 14 11 21 18 15 12
方案说明
- 顺序完全匹配:
expand.grid(rev(l))生成的组合行顺序,和手动枚举的下标遍历规则完全对齐:最后一个列表的向量元素最先迭代完,倒数第二个其次,第一个列表的向量元素最后迭代,和需求完全一致。 - 通用性强:不管列表包含多少个向量、每个向量长度为多少,该方案都可以直接运行,不需要针对列表长度调整代码。
- 可追溯组合明细:如果需要查看每一个求和结果对应的元素组合,直接输出
comb即可,每一行的值就是参与该次求和的对应元素(列顺序为原列表反转顺序,不影响求和结果):
> comb c b a 1 8 10 1 2 5 10 1 3 8 4 1 4 5 4 1 5 8 10 2 6 5 10 2 7 8 4 2 8 5 4 2 9 8 10 3 10 5 10 3 11 8 4 3 12 5 4 3
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

