我试图将矩阵的每一行除以同一行的总和:
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
答案 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。