| rowMedians.matrix {R.native} | R Documentation |
Calculates the median for each row in a matrix.
## S3 method for class 'matrix': rowMedians(x, na.rm=FALSE, ...)
x |
A numeric matrix. |
na.rm |
If TRUE, NAs are excluded before calculating the medians,
otherwise not. |
... |
Not use. |
The main difference between this implementation and the one in
Biobase, rowMedians, is that this one handles
missing values too.
This implementation is also optimized for speed and memory to calculate
the median value whereas the Biobase version uses a more generic
method to estimate and quantiles, cf. rowQ.
Returns a double vector of length equal to number of rows in x.
As the example shows, this implementation is roughly 3-10 times faster
than using apply(x, MARGIN=1, FUN=medians) (as of R v2.4.0).
Henrik Bengtsson (http://www.braju.com/R/)
See rowMeans() in colSums().
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Consistency checks
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cat("Consistency checks:\n")
for (kk in 1:20) {
cat("Random test #", kk, "\n", sep="")
# Simulate data in a matrix of any shape
nrow <- sample(2000, size=1)
ncol <- sample(2000, size=1)
x <- rnorm(nrow*ncol)
dim(x) <- c(nrow, ncol)
# Add NAs?
nas <- sample(c(TRUE,FALSE), size=1)
if (nas) {
nna <- sample(nrow*ncol, size=1)
x[sample(length(x), size=nna)] <- NA
}
na.rm <- sample(c(TRUE,FALSE), size=1)
t1 <- system.time({
y1 <- rowMedians(x, na.rm=na.rm)
})
t2 <- system.time({
y2 <- apply(x, MARGIN=1, FUN=median, na.rm=na.rm)
})
# When all values of 'y2' are NA, 'y2' is logical
if (is.logical(y2)) y2 <- as.double(y2)
stopifnot(identical(y1,y2))
cat(sprintf("rowMedians()/apply(): %.3g\n", (t1/t2)[3]))
}