This report benchmark the performance of colCumsums() and rowCumsums() against alternative methods.
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100, 
+     +100), na_prob = 0) {
+     mode <- match.arg(mode)
+     n <- nrow * ncol
+     if (mode == "logical") {
+         x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+     }     else if (mode == "index") {
+         x <- seq_len(n)
+         mode <- "integer"
+     }     else {
+         x <- runif(n, min = range[1], max = range[2])
+     }
+     storage.mode(x) <- mode
+     if (na_prob > 0) 
+         x[sample(n, size = na_prob * n)] <- NA
+     dim(x) <- c(nrow, ncol)
+     x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+     set.seed(seed)
+     data <- list()
+     data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+     data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+     data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+     data[[4]] <- t(data[[3]])
+     data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+     data[[6]] <- t(data[[5]])
+     names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+     data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5213650 278.5    8529671 455.6  8529671 455.6
Vcells 9925088  75.8   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204441 278.0    8529671 455.6  8529671 455.6
Vcells 9894840  75.5   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.001911 | 0.0022615 | 0.0028634 | 0.0026425 | 0.0032065 | 0.011830 | 
| 2 | apply+cumsum | 0.040984 | 0.0430095 | 0.0450429 | 0.0436840 | 0.0443830 | 0.134853 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cumsum | 21.44636 | 19.01813 | 15.73078 | 16.53131 | 13.84157 | 11.39924 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.002019 | 0.0023745 | 0.0030955 | 0.0031475 | 0.0033615 | 0.012904 | 
| 2 | apply+cumsum | 0.041296 | 0.0430055 | 0.0453320 | 0.0439765 | 0.0448645 | 0.127759 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.000000 | 
| 2 | apply+cumsum | 20.45369 | 18.11139 | 14.64467 | 13.97188 | 13.34657 | 9.900728 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+10x10 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.911 | 2.2615 | 2.86336 | 2.6425 | 3.2065 | 11.830 | 
| 2 | rowCumsums | 2.019 | 2.3745 | 3.09546 | 3.1475 | 3.3615 | 12.904 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumsums | 1.056515 | 1.049967 | 1.081059 | 1.191107 | 1.048339 | 1.090786 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5203021 277.9    8529671 455.6  8529671 455.6
Vcells 9511362  72.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5202997 277.9    8529671 455.6  8529671 455.6
Vcells 9516375  72.7   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.030985 | 0.0331105 | 0.0356015 | 0.0341035 | 0.0369750 | 0.07321 | 
| 2 | apply+cumsum | 0.233731 | 0.2475550 | 0.2683101 | 0.2554475 | 0.2792505 | 0.42647 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 
| 2 | apply+cumsum | 7.54336 | 7.476631 | 7.536484 | 7.49036 | 7.552414 | 5.825297 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.034552 | 0.0367395 | 0.0400708 | 0.038110 | 0.0411165 | 0.075774 | 
| 2 | apply+cumsum | 0.231944 | 0.2421085 | 0.2662760 | 0.255937 | 0.2775260 | 0.437345 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cumsum | 6.712897 | 6.589869 | 6.645136 | 6.715744 | 6.749748 | 5.771703 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+100x100 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 30.985 | 33.1105 | 35.60150 | 34.1035 | 36.9750 | 73.210 | 
| 2 | rowCumsums | 34.552 | 36.7395 | 40.07081 | 38.1100 | 41.1165 | 75.774 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumsums | 1.11512 | 1.109603 | 1.125537 | 1.117481 | 1.112008 | 1.035022 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5203753 278.0    8529671 455.6  8529671 455.6
Vcells 9514872  72.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5203729 278.0    8529671 455.6  8529671 455.6
Vcells 9519885  72.7   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.031286 | 0.0334150 | 0.0412783 | 0.0358795 | 0.0393105 | 0.383971 | 
| 2 | apply+cumsum | 0.145744 | 0.1545035 | 0.1875465 | 0.1641285 | 0.1866940 | 0.641418 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cumsum | 4.658442 | 4.623777 | 4.543462 | 4.574437 | 4.749215 | 1.670486 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.039003 | 0.0403455 | 0.0440631 | 0.043102 | 0.0463195 | 0.065613 | 
| 2 | apply+cumsum | 0.150331 | 0.1564150 | 0.1698952 | 0.167528 | 0.1779855 | 0.270237 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 3.854344 | 3.876888 | 3.855721 | 3.88678 | 3.842561 | 4.11865 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+1000x10 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 31.286 | 33.4150 | 41.27832 | 35.8795 | 39.3105 | 383.971 | 
| 2 | rowCumsums | 39.003 | 40.3455 | 44.06314 | 43.1020 | 46.3195 | 65.613 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumsums | 1.24666 | 1.207407 | 1.067465 | 1.201299 | 1.178298 | 0.1708801 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5203941 278.0    8529671 455.6  8529671 455.6
Vcells 9515562  72.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5203917 278.0    8529671 455.6  8529671 455.6
Vcells 9520575  72.7   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.026868 | 0.0285480 | 0.0320503 | 0.0299965 | 0.0349415 | 0.052815 | 
| 2 | apply+cumsum | 0.900702 | 0.9357485 | 1.0189601 | 0.9755480 | 1.0908195 | 1.451818 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cumsum | 33.52322 | 32.77808 | 31.79257 | 32.52206 | 31.21845 | 27.48874 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.027042 | 0.0281790 | 0.0317528 | 0.0298610 | 0.033192 | 0.052271 | 
| 2 | apply+cumsum | 0.896643 | 0.9348615 | 1.0179929 | 0.9697105 | 1.096916 | 1.433608 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.0000 | 1.00000 | 
| 2 | apply+cumsum | 33.15742 | 33.17582 | 32.05995 | 32.47415 | 33.0476 | 27.42645 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+10x1000 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumsums | 27.042 | 28.179 | 31.75279 | 29.8610 | 33.1920 | 52.271 | 
| 1 | colCumsums | 26.868 | 28.548 | 32.05026 | 29.9965 | 34.9415 | 52.815 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumsums | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 1 | colCumsums | 0.9935656 | 1.013095 | 1.009368 | 1.004538 | 1.052709 | 1.010407 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204103 278.0    8529671 455.6  8529671 455.6
Vcells 9516010  72.7   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204097  278    8529671 455.6  8529671 455.6
Vcells 9566053   73   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.242814 | 0.264977 | 0.2843808 | 0.2699675 | 0.2952235 | 0.737059 | 
| 2 | apply+cumsum | 1.713847 | 1.839176 | 2.1032246 | 1.8978890 | 1.9780215 | 16.359792 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 7.058271 | 6.940889 | 7.395804 | 7.030065 | 6.700081 | 22.19604 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.260093 | 0.279325 | 0.2935745 | 0.289555 | 0.298858 | 0.432349 | 
| 2 | apply+cumsum | 1.699208 | 1.849131 | 2.1100754 | 1.905066 | 1.987033 | 16.991866 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 6.533079 | 6.619996 | 7.187531 | 6.579287 | 6.648755 | 39.30127 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+100x1000 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 242.814 | 264.977 | 284.3808 | 269.9675 | 295.2235 | 737.059 | 
| 2 | rowCumsums | 260.093 | 279.325 | 293.5745 | 289.5550 | 298.8580 | 432.349 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumsums | 1.071162 | 1.054148 | 1.032329 | 1.072555 | 1.012311 | 0.5865867 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204320 278.0    8529671 455.6  8529671 455.6
Vcells 9516617  72.7   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204296  278    8529671 455.6  8529671 455.6
Vcells 9566630   73   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on integer+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.234917 | 0.247979 | 0.2704248 | 0.259225 | 0.288763 | 0.417261 | 
| 2 | apply+cumsum | 0.938419 | 1.001057 | 1.1879427 | 1.046571 | 1.183283 | 8.001552 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 3.994683 | 4.036862 | 4.392876 | 4.037305 | 4.097764 | 19.17637 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on integer+1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.268693 | 0.2808735 | 0.3055827 | 0.2935385 | 0.3265135 | 0.417652 | 
| 2 | apply+cumsum | 0.947420 | 1.0135190 | 1.1753059 | 1.0573140 | 1.1840970 | 8.044296 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 3.526032 | 3.608454 | 3.846114 | 3.60196 | 3.626487 | 19.26076 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on integer+1000x100 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on integer+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on integer+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 234.917 | 247.9790 | 270.4248 | 259.2250 | 288.7630 | 417.261 | 
| 2 | rowCumsums | 268.693 | 280.8735 | 305.5827 | 293.5385 | 326.5135 | 417.652 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.00000 | 1.00000 | 1.00000 | 1.000000 | 1.000000 | 
| 2 | rowCumsums | 1.143778 | 1.13265 | 1.13001 | 1.13237 | 1.130732 | 1.000937 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on integer+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100, 
+     +100), na_prob = 0) {
+     mode <- match.arg(mode)
+     n <- nrow * ncol
+     if (mode == "logical") {
+         x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+     }     else if (mode == "index") {
+         x <- seq_len(n)
+         mode <- "integer"
+     }     else {
+         x <- runif(n, min = range[1], max = range[2])
+     }
+     storage.mode(x) <- mode
+     if (na_prob > 0) 
+         x[sample(n, size = na_prob * n)] <- NA
+     dim(x) <- c(nrow, ncol)
+     x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+     set.seed(seed)
+     data <- list()
+     data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+     data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+     data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+     data[[4]] <- t(data[[3]])
+     data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+     data[[6]] <- t(data[[5]])
+     names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+     data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204520 278.0    8529671 455.6  8529671 455.6
Vcells 9632330  73.5   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204487 278.0    8529671 455.6  8529671 455.6
Vcells 9632428  73.5   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.001778 | 0.0021550 | 0.0027174 | 0.0024265 | 0.0030855 | 0.012622 | 
| 2 | apply+cumsum | 0.041617 | 0.0429945 | 0.0451775 | 0.0442875 | 0.0447965 | 0.121619 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.00000 | 1.00000 | 1.0000 | 1.00000 | 1.000000 | 
| 2 | apply+cumsum | 23.40664 | 19.95104 | 16.62504 | 18.2516 | 14.51839 | 9.635478 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.001775 | 0.0021740 | 0.0031530 | 0.0029935 | 0.0032695 | 0.014764 | 
| 2 | apply+cumsum | 0.040890 | 0.0426805 | 0.0476445 | 0.0440535 | 0.0451975 | 0.131418 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.000000 | 
| 2 | apply+cumsum | 23.03662 | 19.63224 | 15.11104 | 14.71639 | 13.82398 | 8.901246 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+10x10 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.778 | 2.155 | 2.71744 | 2.4265 | 3.0855 | 12.622 | 
| 2 | rowCumsums | 1.775 | 2.174 | 3.15296 | 2.9935 | 3.2695 | 14.764 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.0000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 
| 2 | rowCumsums | 0.9983127 | 1.008817 | 1.160268 | 1.23367 | 1.059634 | 1.169704 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204695 278.0    8529671 455.6  8529671 455.6
Vcells 9633150  73.5   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204671 278.0    8529671 455.6  8529671 455.6
Vcells 9643163  73.6   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.022690 | 0.0237980 | 0.0258113 | 0.024590 | 0.0271775 | 0.047038 | 
| 2 | apply+cumsum | 0.230441 | 0.2418455 | 0.2624985 | 0.251979 | 0.2717825 | 0.423725 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.000000 | 
| 2 | apply+cumsum | 10.15606 | 10.16243 | 10.16993 | 10.24721 | 10.00028 | 9.008142 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+100x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.025000 | 0.0267900 | 0.0289336 | 0.0277845 | 0.030582 | 0.043531 | 
| 2 | apply+cumsum | 0.220881 | 0.2424455 | 0.2613835 | 0.2514460 | 0.272351 | 0.438277 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.00000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 8.83524 | 9.049851 | 9.03391 | 9.049866 | 8.905598 | 10.06816 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+100x100 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 22.69 | 23.798 | 25.81125 | 24.5900 | 27.1775 | 47.038 | 
| 2 | rowCumsums | 25.00 | 26.790 | 28.93359 | 27.7845 | 30.5820 | 43.531 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumsums | 1.101807 | 1.125725 | 1.120968 | 1.129911 | 1.125269 | 0.9254433 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204887 278.0    8529671 455.6  8529671 455.6
Vcells 9634052  73.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5204863 278.0    8529671 455.6  8529671 455.6
Vcells 9644065  73.6   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.022242 | 0.0236490 | 0.0258394 | 0.0252725 | 0.027014 | 0.045889 | 
| 2 | apply+cumsum | 0.142931 | 0.1497305 | 0.1635912 | 0.1607945 | 0.173429 | 0.258434 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.00000 | 1.00000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 6.426176 | 6.331367 | 6.33109 | 6.36243 | 6.419967 | 5.63172 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+1000x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.028172 | 0.029650 | 0.0322225 | 0.0312810 | 0.0336665 | 0.050613 | 
| 2 | apply+cumsum | 0.143565 | 0.149054 | 0.1639212 | 0.1617185 | 0.1730210 | 0.271444 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cumsum | 5.096017 | 5.027116 | 5.087167 | 5.169863 | 5.139263 | 5.363128 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+1000x10 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 22.242 | 23.649 | 25.83935 | 25.2725 | 27.0140 | 45.889 | 
| 2 | rowCumsums | 28.172 | 29.650 | 32.22250 | 31.2810 | 33.6665 | 50.613 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumsums | 1.266613 | 1.253753 | 1.247032 | 1.237748 | 1.246261 | 1.102944 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205075 278.0    8529671 455.6  8529671 455.6
Vcells 9634177  73.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205051 278.0    8529671 455.6  8529671 455.6
Vcells 9644190  73.6   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.019951 | 0.021407 | 0.0249837 | 0.02325 | 0.028980 | 0.041578 | 
| 2 | apply+cumsum | 0.872224 | 0.929991 | 1.0234031 | 0.97128 | 1.098561 | 1.619498 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cumsum | 43.71831 | 43.44331 | 40.96288 | 41.77548 | 37.90754 | 38.95084 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.019277 | 0.0205675 | 0.0232597 | 0.0217955 | 0.024536 | 0.041653 | 
| 2 | apply+cumsum | 0.899400 | 0.9333850 | 1.0144295 | 0.9709405 | 1.085459 | 1.433657 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cumsum | 46.65664 | 45.38155 | 43.61312 | 44.54775 | 44.23944 | 34.41906 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+10x1000 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumsums | 19.277 | 20.5675 | 23.25973 | 21.7955 | 24.536 | 41.653 | 
| 1 | colCumsums | 19.951 | 21.4070 | 24.98367 | 23.2500 | 28.980 | 41.578 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCumsums | 1.034964 | 1.040817 | 1.074117 | 1.066734 | 1.181122 | 0.9981994 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205237 278.0    8529671 455.6  8529671 455.6
Vcells 9635191  73.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205231 278.0    8529671 455.6  8529671 455.6
Vcells 9735234  74.3   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.169302 | 0.1869715 | 0.203835 | 0.1982765 | 0.2174725 | 0.296995 | 
| 2 | apply+cumsum | 1.622244 | 1.7400535 | 2.168069 | 1.8591440 | 2.0870160 | 14.327352 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cumsum | 9.581954 | 9.306517 | 10.63639 | 9.376522 | 9.596689 | 48.24105 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.183713 | 0.200637 | 0.3437208 | 0.2183715 | 0.239217 | 11.65280 | 
| 2 | apply+cumsum | 1.644144 | 1.752021 | 2.1181943 | 1.9403660 | 2.160354 | 13.20317 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cumsum | 8.949525 | 8.732293 | 6.162543 | 8.885619 | 9.030938 | 1.133047 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+100x1000 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 169.302 | 186.9715 | 203.8350 | 198.2765 | 217.4725 | 296.995 | 
| 2 | rowCumsums | 183.713 | 200.6370 | 343.7208 | 218.3715 | 239.2170 | 11652.801 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.00000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | rowCumsums | 1.08512 | 1.073089 | 1.68627 | 1.101348 | 1.099987 | 39.23568 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205442 278.1    8529671 455.6  8529671 455.6
Vcells 9635337  73.6   31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colCumsums = colCumsums(X), `apply+cumsum` = apply(X, MARGIN = 2L, FUN = cumsum), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 5205430 278.0    8529671 455.6  8529671 455.6
Vcells 9735370  74.3   31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowCumsums = rowCumsums(X), `apply+cumsum` = apply(X, MARGIN = 1L, FUN = cumsum), 
+     unit = "ms")
Table: Benchmarking of colCumsums() and apply+cumsum() on double+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 0.159095 | 0.1759715 | 0.1929168 | 0.1885775 | 0.2040345 | 0.280967 | 
| 2 | apply+cumsum | 0.938149 | 1.0150880 | 1.2239085 | 1.0942785 | 1.1882135 | 6.904004 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 | 
| 2 | apply+cumsum | 5.896785 | 5.76848 | 6.344231 | 5.802805 | 5.823591 | 24.5723 | 
Table: Benchmarking of rowCumsums() and apply+cumsum() on double+1000x100 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 0.193541 | 0.2109785 | 0.3366797 | 0.2288495 | 0.2427325 | 5.595377 | 
| 2 | apply+cumsum | 0.952226 | 1.0191530 | 1.1220076 | 1.1013460 | 1.1857660 | 1.776875 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | apply+cumsum | 4.920022 | 4.830601 | 3.332566 | 4.812534 | 4.885073 | 0.3175613 | 
Figure: Benchmarking of colCumsums() and apply+cumsum() on double+1000x100 data as well as rowCumsums() and apply+cumsum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumsums() and rowCumsums() on double+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumsums() and rowCumsums() on double+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 159.095 | 175.9715 | 192.9168 | 188.5775 | 204.0345 | 280.967 | 
| 2 | rowCumsums | 193.541 | 210.9785 | 336.6797 | 228.8495 | 242.7325 | 5595.377 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumsums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | rowCumsums | 1.216512 | 1.198936 | 1.745207 | 1.213557 | 1.189664 | 19.91471 | 
Figure: Benchmarking of colCumsums() and rowCumsums() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

R version 4.1.1 Patched (2021-08-10 r80727)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS:   /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRlapack.so
locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
other attached packages:
[1] microbenchmark_1.4-7   matrixStats_0.60.1     ggplot2_3.3.5         
[4] knitr_1.33             R.devices_2.17.0       R.utils_2.10.1        
[7] R.oo_1.24.0            R.methodsS3_1.8.1-9001 history_0.0.1-9000    
loaded via a namespace (and not attached):
 [1] Biobase_2.52.0          httr_1.4.2              splines_4.1.1          
 [4] bit64_4.0.5             network_1.17.1          assertthat_0.2.1       
 [7] highr_0.9               stats4_4.1.1            blob_1.2.2             
[10] GenomeInfoDbData_1.2.6  robustbase_0.93-8       pillar_1.6.2           
[13] RSQLite_2.2.8           lattice_0.20-44         glue_1.4.2             
[16] digest_0.6.27           XVector_0.32.0          colorspace_2.0-2       
[19] Matrix_1.3-4            XML_3.99-0.7            pkgconfig_2.0.3        
[22] zlibbioc_1.38.0         genefilter_1.74.0       purrr_0.3.4            
[25] ergm_4.1.2              xtable_1.8-4            scales_1.1.1           
[28] tibble_3.1.4            annotate_1.70.0         KEGGREST_1.32.0        
[31] farver_2.1.0            generics_0.1.0          IRanges_2.26.0         
[34] ellipsis_0.3.2          cachem_1.0.6            withr_2.4.2            
[37] BiocGenerics_0.38.0     mime_0.11               survival_3.2-13        
[40] magrittr_2.0.1          crayon_1.4.1            statnet.common_4.5.0   
[43] memoise_2.0.0           laeken_0.5.1            fansi_0.5.0            
[46] R.cache_0.15.0          MASS_7.3-54             R.rsp_0.44.0           
[49] progressr_0.8.0         tools_4.1.1             lifecycle_1.0.0        
[52] S4Vectors_0.30.0        trust_0.1-8             munsell_0.5.0          
[55] tabby_0.0.1-9001        AnnotationDbi_1.54.1    Biostrings_2.60.2      
[58] compiler_4.1.1          GenomeInfoDb_1.28.1     rlang_0.4.11           
[61] grid_4.1.1              RCurl_1.98-1.4          cwhmisc_6.6            
[64] rappdirs_0.3.3          startup_0.15.0          labeling_0.4.2         
[67] bitops_1.0-7            base64enc_0.1-3         boot_1.3-28            
[70] gtable_0.3.0            DBI_1.1.1               markdown_1.1           
[73] R6_2.5.1                lpSolveAPI_5.5.2.0-17.7 rle_0.9.2              
[76] dplyr_1.0.7             fastmap_1.1.0           bit_4.0.4              
[79] utf8_1.2.2              parallel_4.1.1          Rcpp_1.0.7             
[82] vctrs_0.3.8             png_0.1-7               DEoptimR_1.0-9         
[85] tidyselect_1.1.1        xfun_0.25               coda_0.19-4            
Total processing time was 23.34 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colCumsums')
Copyright Henrik Bengtsson. Last updated on 2021-08-25 18:54:45 (+0200 UTC). Powered by RSP.