Nothing
library(Biobase)
set.seed(1)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Consistency checks
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# rowMedians() by rowQ()
rowMedians2 <- function(imat) {
nr <- ncol(imat)
half <- (nr + 1)/2
if (nr%%2 == 1) {
return(rowQ(imat, half))
} else {
return((rowQ(imat, half) + rowQ(imat, half+1))/2)
}
}
cat("Consistency checks:\n")
set.seed(1)
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 <- nas
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(all.equal(y1,y2))
cat(sprintf("rowMedians()/apply(): %.3g\n", (t1/t2)[3]))
if (!nas) {
t3 <- system.time({
y3 <- rowMedians2(x)
})
stopifnot(all.equal(y1,y3))
cat(sprintf("rowMedians()/rowMedians2(): %.3g\n", (t1/t3)[3]))
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Benchmarking
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cat("Benchmarking:\n")
# Simulate data in a matrix of any shape
nrow <- 1000
ncol <- 1000
x <- rnorm(nrow*ncol)
dim(x) <- c(nrow, ncol)
gc()
t0 <- system.time({
for (rr in 1:20)
y0 <- apply(x, MARGIN=1, FUN=median, na.rm=FALSE)
})
gc()
t1 <- system.time({
for (rr in 1:20)
y1 <- rowMedians(x, na.rm=FALSE)
})
gc()
stopifnot(all.equal(y0,y1))
cat(sprintf("rowMedians()/apply(): %.3g\n", (t1/t0)[3]))
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Consistency checks
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cat("Consistency checks without NAs:\n")
for (kk in 1:20) {
cat("Random test #", kk, "\n", sep="")
# Simulate data in a matrix of any shape
nrow <- sample(1000, size=1)
ncol <- sample(1000, size=1)
x <- rnorm(nrow*ncol)
dim(x) <- c(nrow, ncol)
t0 <- system.time({
y0 <- apply(x, MARGIN=1, FUN=median, na.rm=FALSE)
})
t1 <- system.time({
y1 <- rowMedians(x, na.rm=FALSE)
})
stopifnot(all.equal(y0,y1))
} # for (kk in ...)
cat("Consistency checks with NAs:\n")
for (kk in 1:20) {
cat("Random test #", kk, "\n", sep="")
# Simulate data in a matrix of any shape
nrow <- sample(1000, size=1)
ncol <- sample(1000, size=1)
x <- rnorm(nrow*ncol)
dim(x) <- c(nrow, ncol)
# Add NAs
nna <- sample(nrow*ncol-1, size=1)
x[sample(length(x), size=nna)] <- NA
t0 <- system.time({
y0 <- apply(x, MARGIN=1, FUN=median, na.rm=TRUE)
y0[is.na(y0)] <- NA
})
t1 <- system.time({
y1 <- rowMedians(x, na.rm=TRUE)
})
stopifnot(all.equal(y0,y1))
} # for (kk in ...)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.