矩阵操作问题 - colMeans

时间:2014-03-28 00:36:03

标签: r matrix

我在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)) 

给出了我想要的答案。这是唯一的方法吗?转化的数量似乎过多。

1 个答案:

答案 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