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

如何用R的Reduce函数对列表内子列表的同名元素求和?

R语言列表子元素分别求和的解决方案

你的Reduce代码报错的核心原因:Reduce要求传入的处理函数必须接受两个参数——第一个是累积结果(初始值或上一轮的计算输出),第二个是当前遍历到的列表元素。你定义的函数只有一个参数x,导致R无法传递第二个参数,触发unused argument错误。

正确的Reduce实现方式

我们需要设计一个累积求和的逻辑:每次迭代把当前子列表的right和left值加到累积结果中,同时指定初始值为right和left都为0的列表:

# 定义初始累积值
init_acc <- list(right = 0L, left = 0L)

# 执行Reduce累积求和
res <- Reduce(
  function(acc, curr_item) {
    list(
      right = acc$right + curr_item$right,
      left = acc$left + curr_item$left
    )
  },
  x = test,
  init = init_acc
)

# 输出结果
res

运行后会得到目标结构:

$right
[1] 1

$left
[1] 0

更直观的替代方案

如果不需要刻意使用Reduce,以下两种方法逻辑更简洁:

方案1:Base R原生方法(无需额外包)

通过sapply提取所有子元素后直接求和:

res <- list(
  right = sum(sapply(test, function(x) x$right)),
  left = sum(sapply(test, function(x) x$left))
)

方案2:purrr包批量处理(需先安装加载)

purrr的map_dbl可以快速提取数值型元素,再求和:

library(purrr)

res <- list(
  right = test %>% map_dbl("right") %>% sum(),
  left = test %>% map_dbl("left") %>% sum()
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:40:41