我有一个包含14个三维数组的列表(参见下面的扩展) .

  • 每个数组代表一个气候模型 .

  • 它们包含4个不同气候参数(= 4个切片)的欧氏距离值(385x373) .

我的目标是:

  • 为每个气候模型找到10个网格点,其中所有气候参数最适合,即最小的欧氏距离 . 因此,我想分别对所有14x4切片(=气候参数)进行z变换 .

  • 之后,我想在4个气候参数上对z变换值进行平均,这样每个气候模型都存在一个简单的2D阵列 . 我想从这些矩阵的每一个中挑选出具有最佳拟合的10个值/网格点,即最小的欧氏距离 .

以下代码返回ztrans包含14个矩阵的列表,每个矩阵包含 ncol = 4nrow = 143,605 (385x373),而不是我所需的14个矩阵列表,每个矩阵包含 ncol = 385nrow = 373 . 所以我建议在计算中出错:

ztrans <- list()
mean.ztrans <- list()
min.values <- list()

for (i in 1:length(models.list)) {

  ztrans[[i]] <- apply(models.list[[i]], MARGIN = 3, function(x) (x - mean(x))/sd(x))

  mean.ztrans[[i]] <- apply(ztrans[[i]], c(1,2), function(x) mean(x))

  min.values[[i]] <-  which(rank(mean.ztrans[[i]], ties.method='min') <= 10)

}

最后两个函数在另一个 for 循环中没有问题 . 问题似乎是在ztrans对象中 . 我想我错过了有关索引或保证金的内容 . 但我尝试了一切,我找不到任何解决方案 . 非常感谢您的帮助!

EXTENSION:这是我的models.list数据的示例输出

dput(lapply(models.list[3:4], "[", 1:2, 1:4, 1:3))

list(structure(c(2.09909189486221e-05, 2.11098699577055e-05, 
2.09089422854975e-05, 2.09959065239106e-05, 2.09165332916687e-05, 
2.09696558968188e-05, 2.09679193622951e-05, 2.09035656412878e-05, 
14.5389879862467, 14.4131762186686, 14.4208234998915, 14.3084695604112, 
14.2621593051487, 14.1757117377387, 14.0674346923828, 14.0071330600315, 
17.9918197631836, 17.7803471035428, 17.9010253058539, 17.6852742513021, 
17.7930487738715, 17.6089325798882, 17.6458153618707, 17.5119138929579
), .Dim = c(2L, 4L, 3L)), structure(c(2.6861608213655e-05, 2.694993779184e-05, 
2.68257257009728e-05, 2.69702473711078e-05, 2.70261560656361e-05, 
2.70366213853333e-05, 2.71945821715919e-05, 2.71174184201812e-05, 
12.9470822652181, 12.9592661539714, 12.8425070020888, 12.831266784668, 
12.6887640211317, 12.7041046990289, 12.5058373345269, 12.5362530178494, 
17.7252056545681, 17.5347224765354, 17.6345549689399, 17.4180641174316, 
17.5483113606771, 17.3722513834635, 17.4406307644314, 17.3106827629937
), .Dim = c(2L, 4L, 3L)))