应用于 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.
我试图将矩阵的每一行除以同一行的总和:
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.