我试图对矩阵中的值进行缩放,使得每一列加起来等于一。我尝试过以下方法:
显然这不起作用。 然后我尝试了这个:
m = matrix(c(1:9),nrow=3, ncol=3, byrow=T)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
colSums(m)
12 15 18
m = m/colSums(m)
[,1] [,2] [,3]
[1,] 0.08333333 0.1666667 0.25
[2,] 0.26666667 0.3333333 0.40
[3,] 0.38888889 0.4444444 0.50
colSums(m)
[1] 0.7388889 0.9444444 1.1500000
显然这不起作用。 然后我尝试了这个:
m = m/matrix(rep(colSums(m),3), nrow=3, ncol=3, byrow=T)
[,1] [,2] [,3]
[1,] 0.08333333 0.1333333 0.1666667
[2,] 0.33333333 0.3333333 0.3333333
[3,] 0.58333333 0.5333333 0.5000000
m = colSums(m)
[1] 1 1 1
所以这个方法是可行的,但感觉好像还缺少些什么。这不可能是常规做法。我肯定是在这里犯了傻。 如果您能提供任何帮助,将不胜感激。 谢谢, Davy
sweep
的表达能力...只是为了可爱,exp(scale(log(m),center=TRUE,scale=FALSE))
怎么样(因为许多原因不是一个好主意!) - Ben Bolkerscale(m, center=FALSE, scale=colSums(m))
。该函数会对矩阵进行缩放,其中参数center为假表示不进行中心化,参数scale将应用到每一列并用列总和进行缩放。 - flodel