2012-12-01 120 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太...