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

在R语言中对嵌套列表进行逐元素求平均

R语言嵌套列表逐元素求平均方案

示例数据

example <- list(
  list(A = 10, B = list(H = 110, E = 211, G = c(1.4,2)), C = c(13,24)),
  list(A = 15, B = list(H = 100, E = 201, G = c(0.1,5)), C = c(11,25)),
  list(A = 5,  B = list(H = 101, E = 221, G = c(1.2,3)), C = c(14,21))
)

方法一:使用purrr包(简洁高效)

利用purrr::transpose将相同位置的元素分组,再递归计算平均值,保留原嵌套结构:

library(purrr)

# 转置嵌套列表,把对应位置的元素归为一组
transposed_lst <- transpose(example)

# 递归处理每个分组
avg_list <- map(transposed_lst, function(group) {
  if (is.list(group[[1]])) {
    map(transpose(group), ~ mean(unlist(.x)))
  } else {
    mean(unlist(group))
  }
})

方法二:Base R递归函数(无需额外包)

自定义递归函数,遍历嵌套结构并逐元素计算平均:

avg_nested <- function(lst) {
  if (is.numeric(lst[[1]])) {
    # 数值元素直接计算平均
    Reduce(function(a, b) a + b, lst) / length(lst)
  } else {
    # 子列表递归处理,保留原命名
    lapply(setNames(names(lst[[1]]), names(lst[[1]])), function(nm) {
      avg_nested(lapply(lst, `[[`, nm))
    })
  }
}

avg_list <- avg_nested(example)

结果说明

最终得到的avg_list与原列表结构完全一致,部分关键计算结果如下:

  • avg_list$A:10
  • avg_list$B$H:103.6667
  • avg_list$B$G:c(0.9, 3.3333)
  • avg_list$C:c(12.6667, 23.3333)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:56:13