在多个矩阵中获得特定矩阵元素的最大值

时间:2015-06-21 20:36:32

标签: r list matrix max element

我有很多矩阵(20行/ 20列)。我想找到所有这些矩阵上特定元素(单元格)的最大值,例如:第9栏第17栏。

这已接近它: R: Getting maximum value from all matrices in a list 但我无法设法根据我的需要重写它。现在我把我的矩阵放在一个列表中。

任何想法?

3 个答案:

答案 0 :(得分:2)

library(plyr)

mats <- llply(1:1000, function(x) replicate(20, rnorm(20)))

getEntry <- function(mat, row, col) {

  mat[row, col]

}

getMax <- function(mats, row, col) {

  max(laply(mats, function(x) getEntry(x, row, col)))

}

# Get max of row 2, col 3 & row 12, col 19
getMax(mats, 2, 3)
getMax(mats, 12, 19)

这应该做你要问的事。它从每个矩阵中提取指定的单元格,然后取所有选项的最大值。

答案 1 :(得分:1)

这是一个基本解决方案(使用akrun删除的答案中的示例数据),但实际上并不需要匿名函数:

 set.seed(24)
 lst <- lapply(1:4, function(i) matrix(sample(0:9, 20*20,
         replace=TRUE), ncol=20))
 str(lst)

List of 4
 $ : int [1:20, 1:20] 2 2 7 5 6 9 2 7 8 2 ...
 $ : int [1:20, 1:20] 4 1 1 8 9 5 7 0 1 6 ...
 $ : int [1:20, 1:20] 1 8 3 1 2 6 2 3 7 5 ...
 $ : int [1:20, 1:20] 2 3 5 4 3 2 7 2 1 5 ...


 max( sapply(lst, "[", i=9, j=7) )  # Use `[` as a function with 3 parameters:
                                      #  object and 2 indices
[1] 8

答案 2 :(得分:0)

do.call(pmax,lst)[i,j]

这是有效的,除非我误解了这个问题。以这种方式对所有元素采取最大值可能是浪费,但我怀疑这是一个大问题。