<%@include file="includes/setup.md.rsp"%> <%@string colname="colVars"%> <%@string rowname="rowVars"%> <%@meta title="${colname}() and ${rowname}() benchmarks"%> <%@meta author="Henrik Bengtsson"%> <%@meta date="2015-01-06"%> <%@include file="${header}"%> <%@string test_genefilter="TRUE"%> <%@ifeq test_genefilter="TRUE"%> <% use("genefilter", how = "load") genefilter_rowVars <- genefilter::rowVars genefilter_colVars <- function(x, ...) genefilter_rowVars(t(x), ...) %> <%@endif%> # <%@meta name="title"%> This report benchmark the performance of <%=colname%>() and <%=rowname%>() against alternative methods. ## Alternative methods * apply() + var() * colVarColMeans() and rowVarColMeans() <%@ifeq test_genefilter="TRUE"%> * genefilter::rowVars(t(.)) and genefilter::rowVars() <%@endif%> where ```r <%=withCapture({ colVarColMeans <- function(x, na.rm = TRUE) { if (na.rm) { n <- colSums(!is.na(x)) } else { n <- nrow(x) } var <- colMeans(x*x, na.rm = na.rm) - (colMeans(x, na.rm = na.rm))^2 var * n/(n-1) } })%> ``` and ```r <%=withCapture({ rowVarRowMeans <- function(x, na.rm = TRUE) { if (na.rm) { n <- rowSums(!is.na(x)) } else { n <- ncol(x) } mu <- rowMeans(x, na.rm = na.rm) var <- rowMeans(x*x, na.rm = na.rm) - mu^2 var * (n/(n-1)) } })%> ``` <% for (mode in c("integer", "double")) { %> ## Data type "<%=mode%>" ### Data ```r <%=withCapture({ <%@include file="R/random-matrices.R"%> data <- rmatrices(mode = mode) })%> ``` ### Results <% for (dataLabel in names(data)) { %> <% mprintf("%s: %s\n", mode, dataLabel) %> #### <%=dataLabel%> <%=mode%> matrix ```r <%=withCapture({ X <- data[[.dataLabel.]] gc() colStats <- microbenchmark( colVars = colVars(X, na.rm = FALSE), colVarColMeans = colVarColMeans(X, na.rm = FALSE), "apply+var" = apply(X, MARGIN = 2L, FUN = var, na.rm = FALSE), <%@ifeq test_genefilter="TRUE"%> "genefilter::rowVars(t(.))" = genefilter_colVars(X, na.rm = FALSE), <%@endif%> unit = "ms" ) X <- t(X) gc() rowStats <- microbenchmark( rowVars = rowVars(X, na.rm = FALSE), rowVarRowMeans = rowVarRowMeans(X, na.rm = FALSE), "apply+var" = apply(X, MARGIN = 1L, FUN = var, na.rm = FALSE), <%@ifeq test_genefilter="TRUE"%> "genefilter::rowVars" = genefilter_rowVars(X, na.rm = FALSE), <%@endif%> unit = "ms" ) })%> ``` <% crBenchmarkResults(colStats, rowStats, tags=c(mode, dataLabel)) %> <% } # for (dataLabel ...) %> <% } # for (mode ...) %> <%@include file="${footer}"%> <%--------------------------------------------------------------------------- HISTORY: 2015-01-06 o Now benchmarking 'genefilter' functions too. 2014-11-23 o Now benchmarking rowVars() instead of rowSds() since the latter uses the former. 2014-06-09 o Created. ---------------------------------------------------------------------------%>