R 应用数组输出维度

R Apply Array Output Dimension

与此问题相关:

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

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

并且想对 b 的每个元素进行乘法运算,每个切片 a 沿第 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

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

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

If each call to FUN returns a vector of length n, then apply returns an array of dimension c(n, dim(X)[MARGIN]) if n > 1.

在这种情况下,每次调用 FUN returns 一个长度为 4 的向量,MARGIN=3 的维度为 3。请注意,applyFUN 的每次调用的结果都被强制转换为 vector 而不是 matrix.

现在,使用 newa[] <- array(...,您将 newa 对象中的值替换为来自 array 计算的值。 newa 的属性没有改变,所以它的维度仍然是 2 2 3.

希望这对您有所帮助。