-7

私は3D配列を持っています - arr

dim(arr)
[1] 2000   22    3

dim12000 、 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])
    }
}

何か案が?

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ループのスタラテジーを使用する場合は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 に答える