在R中处理嵌套列表:计算多组mu向量对应元素平均值
解决方法:计算1000个mu向量对应元素的平均值
你的核心需求是把1000个长度为15的mu向量,按位置分别求平均(也就是第1个元素的平均、第2个元素的平均…第15个元素的平均),我们可以用基础R的工具一步搞定,先帮你梳理下正确的思路:
首先,你需要先把所有$mu向量从compdraw列表里提取出来,变成一个1000行×15列的矩阵(每一行对应一个mu向量),然后对每一列求均值,就是对应位置元素的平均值。
步骤1:提取所有mu向量
用lapply遍历compdraw的每个元素,直接取出其中的mu:
# 提取所有mu向量到一个列表中 all_mus <- lapply(hb.post.PT1$compdraw, function(item) item$mu)
步骤2:转成矩阵并计算列均值
因为每个mu向量长度都是15,我们可以用do.call(rbind, ...)把列表转成矩阵,再用colMeans()计算每一列的均值:
# 转成矩阵(每行是一个mu向量) mu_matrix <- do.call(rbind, all_mus) # 计算每个位置的平均值,结果是长度15的向量 element_wise_means <- colMeans(mu_matrix)
一步到位的简化写法
如果不想用中间变量,可以把两步合并:
element_wise_means <- colMeans(do.call(rbind, lapply(hb.post.PT1$compdraw, function(item) item$mu)))
为啥你的原代码没成功?
你之前的嵌套lapply有两个关键问题:
- 内层
lapply里用了hb.post.PT1$compdraw[[x]],这里的x是compdraw中的元素(不是索引),所以应该直接用x$mu,而不是再去索引compdraw; - 你的思路是对每个mu向量的元素求均值,但这会得到每个mu自己的平均值,而不是所有mu对应位置的平均,这和你的需求不符。
这样处理后,element_wise_means就是你要的15个元素各自的平均值啦~
内容的提问来源于stack exchange,提问作者RTrain3k
相关产品推荐
相关产品推荐

