2016-10-06 10 views
1

この質問に関連して適用します:Multiply multidimensional array with same-sized matrixR配列出力は外形寸法

私は、次の配列や行列を作成した場合:

a <- array(1, dim=c(2,2,3)) 
b <- matrix(c(1,1,1,1), nrow=2) 

をしてaの各スライスにbの要素ごとの乗算を行うCARRAYしたいと思います3次元に沿って移動すると、私はapplyを使用します。しかし、私は次の奇妙な結果を得ます:

> dim(apply(a, 3, `*`, b)) 
[1] 4 3 
> newa <- array(0, dim=c(2,2,3)) 
> newa[] <- apply(a, 3, `*`, b) 
> dim(newa) 
[1] 2 2 3 

なぜこれらの2つの答えが異なるのですか?

答えて

0

apply(a, 3, * , b)の得られた寸法はマニュアルに従ってため4 3で、?apply参照:

FUNへの各呼び出しは、長さnのベクトルを返す場合n > 1場合、applyは寸法c(n, dim(X)[MARGIN])の配列を返します。この場合

FUNへの各呼び出しは、長4のベクトルを返し、MARGIN=3と寸法が3あります。 FUNの各コールの結果はapplyになり、vectorではなくmatrixに強制的に変更されます。

ここでnewa[] <- array(...を使用して、newaオブジェクトの値をarrayの値に置き換えます。 newaの属性は変更されていないので、次元はまだ2 2 3です。

これが役に立ちます。