【问题标题】:averaging across elements in a 3-D array in RR中3-D数组中元素的平均
【发布时间】:2018-08-11 23:55:01
【问题描述】:

我想从每个元素都是 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) 
}

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

【问题讨论】:

    标签: r for-loop multidimensional-array apply


    【解决方案1】:

    如果我正确理解你的情况,你想apply mean 函数(就像你正在做的那样)列表的每个元素(每个元素恰好是一个数组)。

    有效的方法是使用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 并不重要;不管有多少,它都会平均。

    【讨论】:

    • 完成了这项工作。谢谢!
    猜你喜欢
    • 2022-01-11
    • 2013-07-22
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多