首页 > 解决方案 > R中3-D数组中元素的平均值

问题描述

我想从每个元素都是 3-D 数组的列表中获取平均值。

示例,其中 ind1 表示 3-D 数组中的元素:

>data$ind1
    , , rep1

              [,1]       [,2]     [,3]
     [1,] 58.93456  6.3580551 269.8844
     [2,] 70.88502 -3.4082403 269.6049
     [3,] 75.86015  2.0126083 264.9410

    , , rep2

              [,1]       [,2]     [,3]
     [1,] 58.94869  6.3872151 269.9296
     [2,] 71.04539 -3.4487939 269.5489
     [3,] 75.85713  2.1556785 265.0365

    , , rep3
              [,1]       [,2]     [,3]
     [1,] 59.04455  6.3075519 269.8789
     [2,] 71.04752 -3.4541416 269.6695
     [3,] 74.74456  1.9712155 265.3075

对于一个元素:

>apply(data$ind1, c(1, 2), mean)    
              [,1]       [,2]     [,3]
     [1,] 58.96706  6.3587708 269.8968
     [2,] 71.00619 -3.4402599 269.5941
     [3,] 75.57361  2.0459055 265.0593

跨越许多元素,其中每个元素都有 2-4 次重复:

>for(i in data) {
  apply(data[i], c(1, 2), mean) 
}

我在正确的轨道上吗?谢谢!

标签: rfor-loopmultidimensional-arrayapply

解决方案


如果我正确理解您的情况,您希望对列表的每个元素(每个元素恰好是一个数组)使用applymean函数(就像您正在做的那样)。

执行此操作的有效方法是lapply

# example data
mylist <- list(
    two   = array(runif(2^3), dim=c(2,2,2)),
    three = array(runif(3^3), dim=c(3,3,3)),
    four  = array(runif(4^3), dim=c(4,4,4))
)

# solution
lapply(mylist, apply, c(1,2), mean)

因为mean不关心第三个数组维度有多大,所以你有多少并不重要ind;不管有多少,它都会平均。


推荐阅读