我有一个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])
}
}
有什么想法吗?
答案 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];
}
欢呼声