如何重复R中矩阵每一行的计算?

时间:2012-12-01 20:44:14

标签: r apply

我非常非常喜欢编程和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(),但我自己没有成功。任何有关这方面的帮助,以及如何寻求帮助的建议,所以我不需要发布,将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:3)

您可能还会考虑mahalanobis功能:来自?mahalanobis

  

返回'x'和'中所有行的平方Mahalanobis距离        关于Sigma ='cov',向量mu ='center'。这是        (对于矢量'x')定义为

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

当然,学习如何使用apply也很好......

答案 1 :(得分:2)

如何使用apply

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

此外,如果您的示例可以重现,这会很有帮助,例如:

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