-7

我有一个 3D 数组 - arr

dim(arr)
[1] 2000   22    3

让我们调用 2000 dim1、 22dim2和 3 dim3。我想做这样的事情:

for(d1 in 1:dim1){
    for(d2 in 1:dim2){
        #compute the mean across the 2000 values of arr[d1,d2]
        m<-mean(arr[d1,d2])
    }
}

任何的想法?

4

3 回答 3

7

因此,您提出问题的方式有点草率,但是您可能尝试做的一个示例是对其中 3 个数组中的每一个取每个 2000 x 22 数组的平均值。这是如何做到的:

arr = array(1, dim=c(2000,22,3))
dim(arr)

m = NULL
dim3 = 3
for(d3 in 1:dim3){
    m[d3] = mean(arr[,,d3]) 
}
于 2013-02-27T21:30:40.990 回答
4

我猜你可能想要这个结果:

m <- apply(arr, 1:2, mean)

您当前的代码将在每次内部迭代时覆盖 m 并且您最终会得到一个值,并且在遇到 时也会抛出维度不匹配错误arr[d1,d2]。如果您想使用 for-loop starategy,您需要定义m为 dim1 x dim2 矩阵,然后使用m[d1,d2] <- mean(arr[d1, d2, ]).

下次如果您想避免所有这些反对意见,为什么不使用小示例对象进行一些测试:

arr <- array(1:5*4*3, c(5,4,3))
于 2013-02-27T21:21:22.457 回答
1

没关系,我明白了。这就是我创建 3 [4 x 6] 矩阵列表的方式:

arr = array(1, dim=c(6,4,3));
l<-list(length=dim(arr)[3]);
for (i in 1:dim(arr)[3]){
    l[[i]]<-arr[,,i];
}

干杯

于 2013-02-27T22:21:42.590 回答