2012-12-01 83 views
4

我对编程和R非常新颖。我试图找到我的问题的答案,但问题的一部分是我不确切地知道要搜索什么。如何重复计算R中矩阵的每一行?

我想重复矩阵的每一行的计算(统计距离)。以下是我迄今为止:

pollution1 <-as.matrix(pollution[,5:6]) 
ss <- var(pollution1) 
ssinv <- solve(ss) 
xbar <- colMeans(pollution1) 
t(pollution1[1,]-xbar)%*%ssinv%*%(pollution1[1,]-xbar) 

这让我只有第一统计距离,但我不想重新输入此行以不同的矩阵行让所有的人。

从我读过的内容来看,我可能需要一个循环或使用apply(),但是我自己并没有成功。任何帮助,以及如何搜索帮助,所以我不需要发布的建议,将不胜感激。 谢谢。大约只用apply

apply(pollution1, 1, function(i) t(i-xbar) %*% ssinv %*% (i-xbar)) 

而且

+0

欢迎SO!你能重现一个例子来帮助你吗? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – agstudy

回答

2

什么,这是有益的,如果你让你的例子可重复的,例如:

pollution1 = matrix(rnorm(100), ncol=2) 
ss = var(pollution1) 
ssinv = solve(ss) 
xbar = colMeans(pollution1) 
t(pollution1[1,]-xbar) %*% ssinv %*% (pollution1[1,]-xbar) 
3

您也可以考虑mahalanobis功能:从?mahalanobis

返回'x'中所有行的平方Mahalanobis距离,以及相对于Sigma ='cov'的矢量mu ='中心'返回 。这是 (向量“X”)定义为

    D^2 = (x - mu)' Sigma^-1 (x - mu) 

当然,这是很好的学习如何使用apply太...