Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
apply in R返回奇怪的结果_R_Matrix_Apply - Fatal编程技术网

apply in R返回奇怪的结果

apply in R返回奇怪的结果,r,matrix,apply,R,Matrix,Apply,我试图将矩阵的每一行除以同一行的总和: a <- matrix(1:25,nrow=5,ncol=5) a <- apply(a,1,function(x) x/sum(x)) 因为矩阵是由列构成的,所以将矩阵除以行和得到正确的结果: > a / rowSums(a) [,1] [,2] [,3] [,4] [,5] [1,] 0.01818182 0.1090909 0.2 0.2909091 0.3818182 [2,

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

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

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

> 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
的返回值是按列而不是按行建立的。

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

> 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
的返回值是按列而不是按行建立的。

这就是
apply
的工作方式。默认情况下,矩阵由R列填写。注意?应用的文档:

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


这就是
apply
的工作方式。默认情况下,矩阵由R列填写。注意?应用的文档:

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


我不知道,我刚查过?matrix,你认为如果我把byrow=TRUE,它会解决问题吗?没有任何东西叫做
col
。请将其更改为
ncol
,并为您想要的结果添加
byrow=TRUE
我不知道,我刚刚查了一下?矩阵,您认为如果我将byrow=TRUE,它会解决问题吗?没有所谓的
col
。请将其更改为
ncol
,为获得所需的结果,请添加
byrow=TRUE
,这样“a/rowSums(a)”将“a”的行除以它们各自的总和,这是默认方式吗?如果您想将“a”的列除以行和怎么办?假设您想将每列除以其和,那么您可以像您所做的那样使用
apply
,或者使用
a/rep(colSums(a),each=nrow(a))
。将每列除以行和(对于平方矩阵)也是一样的。那么“a/rowSums(a)”将“a”的行除以它们各自的和是默认的方式吗?如果您想将“a”的列除以行和怎么办?假设您想将每列除以其和,那么您可以像您所做的那样使用
apply
,或者使用
a/rep(colSums(a),each=nrow(a))
。将每列除以行和(对于平方矩阵)的方法相同。