应用于 R returns 奇怪的结果

apply in R returns weird results

我试图将矩阵的每一行除以同一行的总和:

a <- matrix(1:25,nrow=5,ncol=5)
a <- apply(a,1,function(x) x/sum(x))

这给出了预期的结果,但它是按列而不是行构建的:

           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] 0.01818182 0.03333333 0.04615385 0.05714286 0.06666667
[2,] 0.10909091 0.11666667 0.12307692 0.12857143 0.13333333
[3,] 0.20000000 0.20000000 0.20000000 0.20000000 0.20000000
[4,] 0.29090909 0.28333333 0.27692308 0.27142857 0.26666667
[5,] 0.38181818 0.36666667 0.35384615 0.34285714 0.33333333

因为矩阵是由列构成的,所以用矩阵除以行总和得到正确的结果:

> a / rowSums(a)
           [,1]      [,2] [,3]      [,4]      [,5]
[1,] 0.01818182 0.1090909  0.2 0.2909091 0.3818182
[2,] 0.03333333 0.1166667  0.2 0.2833333 0.3666667
[3,] 0.04615385 0.1230769  0.2 0.2769231 0.3538462
[4,] 0.05714286 0.1285714  0.2 0.2714286 0.3428571
[5,] 0.06666667 0.1333333  0.2 0.2666667 0.3333333

之所以有效,是因为 rowSums 编辑的矢量 return 被回收了。

要使 apply 起作用,您只需要转置结果,因为 apply 的 return 值是按列而非行构建的。

这就是 apply 的工作方式。默认情况下,矩阵由 R 中的列填充。请注意 ?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.