【问题标题】:How to average a matrix of lists?如何平均列表矩阵?
【发布时间】:2021-03-16 02:06:55
【问题描述】:

我有一个关于平均列表矩阵的复杂计算问题...

矩阵看起来像

mat <- matrix(list(), 100, 10)

每个单元格都填充有 3 个元素的列表。例如,mat[,1] 看起来像

mat[,1]

[[1]]

[1] 1.21 1.33 1.50

[[2]]

[1] 2.1 1.9 4.5

[[3]]

[1] 0.1 0.4 1.5

...

[[100]]

[1] 0.8 0.69 1.42

我希望对 100 个列表中的所有第一个元素进行平均。换句话说,就是计算 (1.21 + 2.1 + 0.1 + ... + 0.8)/100。同样,它可以应用于所有第二个元素,如 (1.33 + 1.9 + 0.4 + ... + 0.69)/100。还有第三个元素...如果可能的话,它可以将此过程应用于 mat 中的所有 10 列。

如何使用 lapply 或 sapply 函数来实现?

【问题讨论】:

  • 最好举个小例子。例如较小尺寸的矩阵。
  • 与 Thomas 的尝试类似,我认为 apply(mat, 2, function(x) colMeans(do.call(rbind, x))) 应该适合您。

标签: r list matrix statistics


【解决方案1】:

也许你可以试试colMeans + rbindapply

as.matrix(asplit(apply(mat, 2, function(x) colMeans(do.call(rbind, x))), 2))

【讨论】:

  • OP 在 column_sum / nrow(mat) 之后。另外,我尝试了这个,但在取消列出它们后它没有给出列的含义 - 也许我误解了一些东西。
  • @Suren 我猜 OP 想要为每个单元格获取一个长度为 3 的数组
  • 是的,我认为你是对的。我想我没有很好地阅读这个问题。
【解决方案2】:

使用dplyr函数bind_cols绑定mat[, i]中的每个列表, 和取行的意思。

res_in_cols <- apply(mat, 2, function(x) rowMeans(dplyr::bind_cols(x)))

mat[, i] 的平均值在res_in_cols 的第 i 列中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2013-01-04
    • 2014-02-10
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多