2011-09-11 102 views
1

掃除colMeans,rowMeans和從分別列,行和觀察的意思是我使用以下代碼:掃出colMeans和rowMeans

a <- matrix(data=seq(from=2, to=60, by=2), nrow=6, ncol=5, byrow=FALSE) 
b <- matrix(data=rep(colMeans(a), nrow(a)), nrow=nrow(a), ncol=ncol(a), byrow=TRUE) 
c <- matrix(data=rep(rowMeans(a), ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE) 
d <- matrix(data=rep(mean(a), nrow(a)*ncol(a)), nrow=nrow(a), ncol=ncol(a), byrow=FALSE) 
e <- a-b-c-d 

colMeans可以通過使用該命令

a1 <- sweep(a, 2, colMeans(a), "-") 
被掃出

是否有任何單獨的命令來掃描colMeans,rowMeans和mean?提前致謝。

回答

2

你認爲e應該在這個例子中看起來像什麼?也許你的線應該是e <- a-b-c+d,這樣e的平均值爲零。

以下代碼與使用b,cd(算術級數示例,0矩陣)計算結果相同。如果您堅持,請將+更改爲-

e <- t(t(a) - colMeans(a)) - rowMeans(a) + mean(a) 
+0

@ Henry:非常感謝。我知道了。 – MYaseen208

1

不是我所知道的,但爲什麼不寫出自己的?它只有四條線:

meanSweep <- function(x){ 
    tmp <- sweep(x,2,colMeans(x),"-") 
    tmp <- sweep(tmp,1,rowMeans(x),"-") 
    tmp <- tmp - mean(x) 
    tmp 
} 

all.equal(e,meanSweep(a)) 
[1] TRUE