подметание colMeans и rowMeans - PullRequest
       5

подметание colMeans и rowMeans

1 голос
/ 11 сентября 2011

Чтобы вычистить 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 ]

2 голосов
/ 12 сентября 2011

Как вы думаете, e должно выглядеть в этом примере? Возможно, ваша строка должна быть e <- a-b-c+d, чтобы e имел нулевое среднее.

Следующий код дает тот же результат, что и ваши вычисления с использованием b, c и d (с вашим примером арифметической прогрессии, матрицей 0 с). Измените + на -, если вы настаиваете.

 e <- t(t(a) - colMeans(a)) - rowMeans(a) + mean(a)   
1 голос
/ 12 сентября 2011

Не то, что я знаю, но почему бы просто не написать свой собственный? Всего четыре строки:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...