5

我的数组是

x <- array(1:24, dim=c(3,4,3))

我的任务1是根据前两个维度找到最大值

x.max <- apply(x,c(1,2), function(x) ifelse(all(is.na(x)), NA, max(x, na.rm = TRUE)))    

如果有 NA 数据,我的任务 2 是在第三维上找到最大值位置。我试过了

x.max.position = apply(x, c(1,2),which.max(x))

但这只能给我在拳头二维上的位置。

谁能帮我?

4

1 回答 1

4

这并不完全清楚,但如果你想找到max第三维的每个矩阵(这在技术上是正确的说法吗?),那么你需要apply跨第三维使用。margin下面的论点?apply指出:

一个向量,给出函数将被应用的下标。例如,对于矩阵,1 表示行,2 表示列,c(1, 2) 表示行和列。

所以对于这个例子,你有一个 3D 数组,3是第三维。所以...

t( apply( x , 3 , function(x) which( x == max(x) , arr.ind = TRUE ) ) ) 
     [,1] [,2]
[1,]    3    4
[2,]    3    4
[3,]    3    4

它返回一个矩阵,其中每一行包含第三维的每个二维数组/矩阵的最大值的行和列索引。

如果你想要max跨越所有维度,你可以使用这样whicharr.ind参数:

which( x==max(x,na.rm=T) , arr.ind = T )
     dim1 dim2 dim3
[1,]    3    4    2

这告诉我们max值是第三行第四列第二个矩阵。

编辑

要在昏暗 3 处找到昏暗 1 和 2 上的值最大的位置,请尝试:

which.max( apply( x , 3 , max ) )
# [1] 2

这告诉我们,在第三维的位置 2 包含最大值。

于 2013-07-30T09:50:01.000 回答