简体   繁体   中英

R function to compute deviation matrix

I've writen a function to compute a matrix where each column is the corresponding input matrix column minus the column mean.

# compute the deviation matrix
deviation <- function(X) {
  one <- rep(1, nrow(X))
  n <- ncol(X)
  d <- matrix(data = NA, nrow = nrow(X), ncol = ncol(X))
  for(i in seq.int(from = 1, to = n)) {
    d[,i] <- X[,i] - mean(X[,i], na.rm = TRUE) * one
  }
  d
}

Could this function be written more idiomatically in R (using functional programming, perhaps)?

Use sweep and colMeans :

sweep(mat, 2, colMeans(mat))

By default, sweep uses - or the subtraction function, taking the column means as calculated by colMeans , from the values in each column ( MARGIN=2 ). Gives the same result:

mat <- matrix(1:12,nrow=3)
deviation(mat)
#     [,1] [,2] [,3] [,4]
#[1,]   -1   -1   -1   -1
#[2,]    0    0    0    0
#[3,]    1    1    1    1

sweep(mat, 2, colMeans(mat))
#     [,1] [,2] [,3] [,4]
#[1,]   -1   -1   -1   -1
#[2,]    0    0    0    0
#[3,]    1    1    1    1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM