我有一个包含14个三维数组的列表(参见下面的扩展) .
-
每个数组代表一个气候模型 .
-
它们包含4个不同气候参数(= 4个切片)的欧氏距离值(385x373) .
我的目标是:
-
为每个气候模型找到10个网格点,其中所有气候参数最适合,即最小的欧氏距离 . 因此,我想分别对所有14x4切片(=气候参数)进行z变换 .
-
之后,我想在4个气候参数上对z变换值进行平均,这样每个气候模型都存在一个简单的2D阵列 . 我想从这些矩阵的每一个中挑选出具有最佳拟合的10个值/网格点,即最小的欧氏距离 .
以下代码返回ztrans包含14个矩阵的列表,每个矩阵包含 ncol = 4
和 nrow = 143,605
(385x373),而不是我所需的14个矩阵列表,每个矩阵包含 ncol = 385
和 nrow = 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)))