【问题标题】:Finding maximum value in columns of matrices within a list在列表中的矩阵列中查找最大值
【发布时间】:2021-11-26 04:36:21
【问题描述】:

我有一个包含十个 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) 的长度必须为正

【问题讨论】:

    标签: r apply


    【解决方案1】:

    我们需要lapplyapply 即循环listlapply,然后循环遍历每个matrix 的列(MARGIN = 2) 和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"))))
    

    【讨论】:

    • 嗨@akrun,感谢您提供的两种解决方案。我已经尝试了第一个解决方案,它奏效了!但是,当我尝试第二种解决方案时,它返回错误消息:“FUN(X[[i]], ...) 中的错误:参数 'x' 必须是矩阵或向量。”
    • @HongH378 我假设你的列表有你提到的矩阵元素5 x 5 matrices。如果是data.frame,需要转换成matrixlapply(MyList, function(x) colMaxs(x, na.rm = TRUE))
    • 谢谢您,我已经尝试过您的解决方案,并且成功了! - 此消息是为了向其他用户展示第二个解决方案也适用 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多