申请R返回奇怪的结果

时间:2016-06-30 18:42:01

标签: r matrix apply

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

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

2 个答案:

答案 0 :(得分:4)

因为矩阵是按列构造的,所以将矩阵除以行总和会得到正确的结果:

> 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返回的向量已被回收。

要使apply生效,您只需转置结果,因为apply的返回值是按列而不是行构建的。

答案 1 :(得分:0)

这就是apply的工作方式。默认情况下,矩阵由R中的列填充。请注意?apply:

的文档
  

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