R三维数组

时间:2013-02-27 20:58:48

标签: arrays r

我有一个3D数组 - arr

dim(arr)
[1] 2000   22    3

我们拨打2000 dim1,22 dim2和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])
    }
}

有什么想法吗?

3 个答案:

答案 0 :(得分: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]) 
}

答案 1 :(得分:4)

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

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

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

下次如果你想避免所有这些downvotes,为什么不用小的示例对象展示一些测试:

arr <- array(1:5*4*3, c(5,4,3))

答案 2 :(得分: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];
}

欢呼声