2

リストを生成するコードは次のとおりです。

    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

これを行う簡単な方法があるかどうか疑問に思っていますか?

4

1 に答える 1