我有很多矩阵(20行/ 20列)。我想找到所有这些矩阵上特定元素(单元格)的最大值,例如:第9栏第17栏。
这已接近它: R: Getting maximum value from all matrices in a list 但我无法设法根据我的需要重写它。现在我把我的矩阵放在一个列表中。
任何想法?
答案 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]
这是有效的,除非我误解了这个问题。以这种方式对所有元素采取最大值可能是浪费,但我怀疑这是一个大问题。