下面是生成列表的代码:
x = matrix(1, 4, 4)
x[2,2] = 5
x[2:3, 1] = 3
x
# [,1] [,2] [,3] [,4]
#[1,] 1 1 1 1
#[2,] 3 5 1 1
#[3,] 3 1 1 1
#[4,] 1 1 1 1
res = apply(x, 2, function(i) list(m=max(i), idx=which(i == max(i))))
res
#[[1]]
#[[1]]$m
#[1] 3
#
#[[1]]$idx
#[1] 2 3
#
#
#[[2]]
#[[2]]$m
#[1] 5
#
#[[2]]$idx
#[1] 2
#
#
#[[3]]
#[[3]]$m
#[1] 1
#
#[[3]]$idx
#[1] 1 2 3 4
#
#
#[[4]]
#[[4]]$m
#[1] 1
#
#[[4]]$idx
#[1] 1 2 3 4
现在我想比较每个子列表中的 $m,得到矩阵中的最大值及其索引,我可以这样做
mvector = vector('numeric', 4)
for (i in 1:4) {
mvector[i] = res[[i]]$m
}
mvector
#[1] 3 5 1 1
max_m = max(mvector)
max_m
#[1] 5
max_col = which(mvector == max_m)
max_row = res[[max_col]]$idx
max_row
#[1] 2
x[max_row, max_col]
#[1] 5
我想知道是否有更简单的方法可以做到这一点?