在列表中的矩阵列中查找最大值

Finding maximum value in columns of matrices within a list

我有一个包含十个 5x5 矩阵的列表,我想获得每个矩阵中每一列的最大值。我的列表示例如下:

My List:
          [[1]]   
                A    B    C    D    E      
          [1,]  30   40   60   12   7
          [2,]  14   30   50   25   2 
          [3,]  53   1    50   54   50 
          [4,]  61   200  50   33   7 
          [5,]  73   88   50   33   8  
          
          .....
    
          [[10]]   
                A    B    C    D    E      
          [1,]  2    40   60   6    7
          [2,]  6    30   2    25   2 
          [3,]  9    1    40   54   50 
          [4,]  55   2    80   1    100 
          [5,]  20   88   1    200  8  

我需要的结果是: 我的列表在每个矩阵的每一列显示最大值,结果列表将有十个 1x5 矩阵:

          [[1]]   
                A    B    C    D    E      
          [1,]  73   200  60   54   50 
          
          .....
    
          [[10]]   
                A    B    C    D    E      
          [1,]  55    88   80  200  100

我使用了 apply 但我知道我缺少一些东西来告诉它遍历每个矩阵的每一列..

apply(My List, 2, max, na.rm = TRUE) 

我收到的错误信息是:

dim(X) must have a positive length

我们需要 lapplyapply,即用 lapply 遍历 list,然后遍历 [=] 的列 (MARGIN = 2) 19=] 在每个 listapply

lapply(MyList, function(x) apply(x, MARGIN = 2, 
       FUN = max, na.rm = TRUE))

-输出

[[1]]
  A   B   C   D   E 
 73 200  60  54  50 

[[2]]
  A   B   C   D   E 
 55  88  80 100 100 

或使用 colMaxs 来自 matrixStats

library(matrixStats)
lapply(MyList, colMaxs, na.rm = TRUE)
[[1]]
[1]  73 200  60  54  50

[[2]]
[1]  55  88  80 100 100

数据

MyList <- list(structure(c(30, 14, 53, 61, 73, 40, 30, 1, 200, 88, 60, 
50, 50, 50, 50, 12, 25, 54, 33, 33, 7, 2, 50, 7, 8), .Dim = c(5L, 
5L), .Dimnames = list(NULL, c("A", "B", "C", "D", "E"))), structure(c(2, 
6, 9, 55, 20, 40, 30, 1, 2, 88, 60, 2, 40, 80, 1, 6, 25, 54, 
1, 100, 7, 2, 50, 100, 8), .Dim = c(5L, 5L), .Dimnames = list(
    NULL, c("A", "B", "C", "D", "E"))))