我在R中做了一些非常简单的事情,我发现了这个我无法弄清楚的问题。 我正在标准化一些矩阵中的变量,发现结果没有给出我认为应该的东西。我写了一个小例子:
t = matrix(1:9, nrow = 3) ## data
t
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
现在我的问题是,为什么以下代码没有给出相同的答案?
t[1,] - colMeans(t)
[1] -1 -1 -1
(t - colMeans(t))[1,]
[1] -1 2 5
正确的答案是前者,但是我想知道是否有人可以向我解释为什么会发生后者?
如果有人可以建议一种方法来做前者没有任何循环(这就是为什么我尝试后者),这将是值得赞赏的。
谢谢,
萨姆
修改
(将t矩阵更改为x以消除混淆)
t(t(x) - colMeans(x))
给出了我想要的答案。这是唯一的方法吗?转化的数量似乎过多。
答案 0 :(得分:1)
您需要所有这些转置来对矢量/矩阵进行正确的操作,或者您可以通过列的方式构造矩阵:
> means.mat = matrix(colMeans(x),nrow=nrow(x),ncol=ncol(x),byrow=T)
> means.mat
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 2 5 8
[3,] 2 5 8
> x-means.mat
[,1] [,2] [,3]
[1,] -1 -1 -1
[2,] 0 0 0
[3,] 1 1 1