gpt4 book ai didi

r - 比较 R 中列表的相应元素

转载 作者:行者123 更新时间:2023-12-04 04:59:17 30 4
gpt4 key购买 nike

下面是生成列表的代码:

    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

我想知道是否有更简单的方法来做到这一点?

最佳答案

你必须建立那个 list 吗?您可以处理矩阵 x直接:

最大值(您的 max_m):

max(x)
# [1] 5

在矩阵中找到该值的位置(仅第一次匹配):
which.max(x)
# [1] 5

或其行和列索引(您的 max.rowmax.col ):
arrayInd(which.max(x), dim(x))
# [,1] [,2]
# [1,] 2 2

如果有多个最大值,您可以通过替换 which.max(x) 来获得所有最大值。与 which(x == max(x))在上面的两个声明中。

关于r - 比较 R 中列表的相应元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com