R应用阵列输出尺寸

时间:2016-10-06 11:39:48

标签: arrays r matrix apply

与此问题相关:Multiply multidimensional array with same-sized matrix

如果我创建以下数组和矩阵:

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

并且想要将b的元素乘法与每个a切片沿着第三维移动,我会使用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

为什么这两件事会给出不同的答案?

1 个答案:

答案 0 :(得分:0)

apply(a, 3, * , b)的结果维度为4 3,因为根据文档,请参阅?apply

  

如果对FUN的每次调用都返回长度为n的向量,那么applyc(n, dim(X)[MARGIN])返回维n > 1的数组。

在这种情况下,每次调用FUN都会返回一个长度为4的向量,而带有MARGIN=3的维度为3。请注意,FUN中每个apply来电的结果都会被强制转换为vector而不是matrix

现在,使用newa[] <- array(...,您将使用newa计算中的值替换array对象中的值。 newa的属性未更改,因此其维度仍为2 2 3

希望这有帮助。