在R中有没有一种方法可以比较每个行-列索引处多维数组的层以确定最大值

在R中有没有一种方法可以比较每个行-列索引处多维数组的层以确定最大值,r,arrays,R,Arrays,我正在努力找出如何在每一行-列索引处比较多维数组的层,以确定哪一层具有这些位置的最大值和最小值。实际上,阵列最终可能会有几十层(如果不是更多的话)。但假设我有一个3x3x3数组,如下所示: set.seed(1) test <- array(c(rnorm(1:5), rnorm(1:5), rnorm(1:5)), dim=c(3,3,3), dimnames = list( c("Row1", "Row2", "Row3"

我正在努力找出如何在每一行-列索引处比较多维数组的层,以确定哪一层具有这些位置的最大值和最小值。实际上,阵列最终可能会有几十层(如果不是更多的话)。但假设我有一个3x3x3数组,如下所示:

set.seed(1)
test <- array(c(rnorm(1:5), rnorm(1:5), rnorm(1:5)), dim=c(3,3,3), dimnames = list(
  c("Row1", "Row2", "Row3"),
  c("Col1", "Col2", "Col3"),
  c("Array1", "Array2", "Array3")
  ))
set.seed(1)

测试您可以
在其他两个维度上应用
哪个.max
函数:

apply(测试,c(1,2),其中.max)
#>Col1 Col2 Col3
#>第13排第1排
#>第2排第3排
#>第3排第2排第1
其中每个数字表示具有最大值的图层

如果确实需要正确“切片”的名称,可以执行以下操作:

apply(test,c(1,2),函数(x)dimnames(test)[[3]][which.max(x)])
#>Col1 Col2 Col3
#>第1行“阵列3”“阵列1”“阵列1”
#>第2行“阵列2”“阵列3”“阵列3”
#>第3行“阵列2”“阵列2”“阵列1”
我们可以目视确认这些是正确的:

测试
,Array1
Col1 Col2 Col3
第1行-0.6264538 1.5952808 0.4874291
第2行0.1836433 0.3295078 0.7383247
第3行-0.8356286-0.8204684 0.5757814
,Array2
Col1 Col2 Col3
第1行-0.3053884-0.6212406-0.6264538
第2行1.5117812-2.2146999 0.1836433
第3行0.3898432 1.1249309-0.8356286
,阵列3
Col1 Col2 Col3
第1行1.5952808 0.4874291-0.3053884
第2行0.3295078 0.7383247 1.5117812
第3行-0.8204684 0.5757814 0.3898432

这太棒了!我应该能够使用原始数组名称的向量来交换带有名称的值。谢谢