Z单独转换R中的3D阵列列表中的每个切片

时间:2018-03-19 20:48:25

标签: r for-loop multidimensional-array apply

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

  • 每个数组代表一个气候模型。
  • 它们包含4个不同气候参数(= 4个切片)的欧氏距离值(385x373)。

我的目标是:

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

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

  3. 以下代码为 ztrans 返回一个包含14个矩阵的列表,每个矩阵包含ncol = 4nrow = 143,605(385x373),而不是我所需的14个矩阵列表,每个矩阵包含{{ 1}}和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) } 循环中工作没有问题。问题似乎在 ztrans 对象中。我想我错过了关于索引或保证金的一些内容。但我尝试了一切,我找不到任何解决方案。非常感谢您的帮助!

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

    for

0 个答案:

没有答案