【问题标题】:Sum of a list of matrices in RR中矩阵列表的总和
【发布时间】:2020-11-23 15:18:26
【问题描述】:

我正在尝试将矩阵列表放在一个列表中,然后在每个列表中进行求和。以下是代码的简单示例:

假设我有 4 个矩阵:

x1 <- matrix(1:9, nrow = 3)
x2 <- matrix(2:10, nrow = 3)
x3 <- matrix(3:11, nrow = 3)
x4 <- matrix(4:12, nrow = 3)

我想以这样的方式将它们放入list()

[[1]]
[[1]][[1]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

[[1]][[2]]
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
[3,]    4    7   10


[[2]]
     [,1] [,2] [,3]
[1,]    3    6    9
[2,]    4    7   10
[3,]    5    8   11

[[3]]
     [,1] [,2] [,3]
[1,]    4    7   10
[2,]    5    8   11
[3,]    6    9   12

我如何对list() 中的每个元素进行求和? 例如,我想要的输出如下:

[[1]]
     [,1] [,2] [,3]
[1,]    3    9   15
[2,]    5   11   17
[3,]    7   13   19

[[2]]
     [,1] [,2] [,3]
[1,]    3    6    9
[2,]    4    7   10
[3,]    5    8   11

[[3]]
     [,1] [,2] [,3]
[1,]    4    7   10
[2,]    5    8   11
[3,]    6    9   12

我尝试过使用list(Reduce(`+`, x)),但它不起作用。

【问题讨论】:

    标签: r list matrix sum


    【解决方案1】:

    由于您想保留顶级列表,请使用lapply

    lapply(x, function(l) if(is.list(l)) Reduce(`+`, l) else l)
    
    #[[1]]
    #     [,1] [,2] [,3]
    #[1,]    3    9   15
    #[2,]    5   11   17
    #[3,]    7   13   19
    
    #[[2]]
    #     [,1] [,2] [,3]
    #[1,]    3    6    9
    #[2,]    4    7   10
    #[3,]    5    8   11
    
    #[[3]]
    #     [,1] [,2] [,3]
    #[1,]    4    7   10
    #[2,]    5    8   11
    #[3,]    6    9   12
    

    【讨论】:

      【解决方案2】:

      @RonakShahmap_if() 的答案对应的purrr 版本:

      library(purrr)
      
      map_if(x, is.list, reduce, `+`)
      
      # [[1]]
      #      [,1] [,2] [,3]
      # [1,]    3    9   15
      # [2,]    5   11   17
      # [3,]    7   13   19
      # 
      # [[2]]
      #      [,1] [,2] [,3]
      # [1,]    3    6    9
      # [2,]    4    7   10
      # [3,]    5    8   11
      # 
      # [[3]]
      #      [,1] [,2] [,3]
      # [1,]    4    7   10
      # [2,]    5    8   11
      # [3,]    6    9   12
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多