colRowCummins - HenrikBengtsson/matrixStats GitHub Wiki
matrixStats: Benchmark report
This report benchmark the performance of colCummins() and rowCummins() against alternative methods.
- apply() + cummin()
> 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 3094809 165.3    5709258 305.0  5709258 305.0
Vcells 5749188  43.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093535 165.3    5709258 305.0  5709258 305.0
Vcells 5745576  43.9   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.001104 | 0.0013695 | 0.0017350 | 0.001548 | 0.001846 | 0.011595 | 
| 2 | apply+cummin | 0.024364 | 0.0253780 | 0.0269594 | 0.025588 | 0.025956 | 0.127639 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.00000 | 1.00000 | 1.0000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 22.06884 | 18.53085 | 15.5388 | 16.52972 | 14.06067 | 11.00811 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.001038 | 0.0016775 | 0.0023967 | 0.002035 | 0.002758 | 0.012162 | 
| 2 | apply+cummin | 0.025164 | 0.0258005 | 0.0356321 | 0.026401 | 0.040775 | 0.136773 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 24.24277 | 15.38033 | 14.86709 | 12.97346 | 14.78426 | 11.24593 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+10x10 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | colCummins | 1.104 | 1.3695 | 1.73497 | 1.548 | 1.846 | 11.595 | 
| 2 | rowCummins | 1.038 | 1.6775 | 2.39671 | 2.035 | 2.758 | 12.162 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.0000000 | 1.0000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 | 
| 2 | rowCummins | 0.9402174 | 1.2249 | 1.381413 | 1.314599 | 1.494041 | 1.0489 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3092090 165.2    5709258 305.0  5709258 305.0
Vcells 5362067  41.0   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3092084 165.2    5709258 305.0  5709258 305.0
Vcells 5367110  41.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.016729 | 0.0173910 | 0.0188918 | 0.017871 | 0.0183840 | 0.044086 | 
| 2 | apply+cummin | 0.163873 | 0.1665145 | 0.1830672 | 0.171454 | 0.1831925 | 0.332822 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 9.795744 | 9.574751 | 9.690283 | 9.593979 | 9.964779 | 7.549381 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.012460 | 0.012819 | 0.0134192 | 0.0131660 | 0.0135165 | 0.022524 | 
| 2 | apply+cummin | 0.166404 | 0.168387 | 0.1737151 | 0.1689845 | 0.1706210 | 0.336706 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 13.35506 | 13.13574 | 12.94522 | 12.83492 | 12.62316 | 14.94877 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+100x100 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 12.460 | 12.819 | 13.41924 | 13.166 | 13.5165 | 22.524 | 
| 1 | colCummins | 16.729 | 17.391 | 18.89183 | 17.871 | 18.3840 | 44.086 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.00000 | 
| 1 | colCummins | 1.342616 | 1.356658 | 1.407817 | 1.35736 | 1.360115 | 1.95729 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3092823 165.2    5709258 305.0  5709258 305.0
Vcells 5365579  41.0   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3092814 165.2    5709258 305.0  5709258 305.0
Vcells 5370617  41.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.017532 | 0.017917 | 0.0202069 | 0.0183240 | 0.0186820 | 0.123854 | 
| 2 | apply+cummin | 0.097569 | 0.101966 | 0.1185105 | 0.1028265 | 0.1051975 | 0.562017 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 5.565195 | 5.69102 | 5.864844 | 5.611575 | 5.630955 | 4.537738 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.013103 | 0.0137600 | 0.0192005 | 0.0141275 | 0.014651 | 0.114058 | 
| 2 | apply+cummin | 0.097622 | 0.1017285 | 0.1150768 | 0.1029030 | 0.104333 | 0.567213 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 2 | apply+cummin | 7.450355 | 7.39306 | 5.993428 | 7.283879 | 7.12122 | 4.973022 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+1000x10 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 13.103 | 13.760 | 19.20050 | 14.1275 | 14.651 | 114.058 | 
| 1 | colCummins | 17.532 | 17.917 | 20.20693 | 18.3240 | 18.682 | 123.854 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 1 | colCummins | 1.338014 | 1.302108 | 1.052417 | 1.297045 | 1.275135 | 1.085886 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093009 165.2    5709258 305.0  5709258 305.0
Vcells 5366262  41.0   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093003 165.2    5709258 305.0  5709258 305.0
Vcells 5371305  41.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.013583 | 0.0152280 | 0.0205396 | 0.0165205 | 0.0207220 | 0.099007 | 
| 2 | apply+cummin | 0.758790 | 0.8367295 | 0.8983289 | 0.8579140 | 0.8898655 | 1.708476 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 55.86321 | 54.94678 | 43.73648 | 51.93027 | 42.94303 | 17.25611 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.012011 | 0.0131105 | 0.0140269 | 0.013643 | 0.0141655 | 0.027034 | 
| 2 | apply+cummin | 0.740832 | 0.8246865 | 0.8358010 | 0.842213 | 0.8594920 | 0.912199 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 61.67946 | 62.90275 | 59.58541 | 61.73224 | 60.67502 | 33.74266 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+10x1000 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | rowCummins | 12.011 | 13.1105 | 14.02694 | 13.6430 | 14.1655 | 27.034 | 
| 1 | colCummins | 13.583 | 15.2280 | 20.53958 | 16.5205 | 20.7220 | 99.007 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 1 | colCummins | 1.13088 | 1.161512 | 1.464295 | 1.210914 | 1.46285 | 3.662314 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093193 165.2    5709258 305.0  5709258 305.0
Vcells 5366745  41.0   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093184 165.2    5709258 305.0  5709258 305.0
Vcells 5416783  41.4   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.158854 | 0.167977 | 0.1750069 | 0.1740525 | 0.1790625 | 0.222749 | 
| 2 | apply+cummin | 1.454637 | 1.568151 | 1.8673674 | 1.6085750 | 1.6323595 | 13.776363 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cummin | 9.157069 | 9.335513 | 10.67025 | 9.241895 | 9.116144 | 61.84703 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.105732 | 0.114414 | 0.1213062 | 0.1178415 | 0.1232105 | 0.263937 | 
| 2 | apply+cummin | 1.492538 | 1.573149 | 1.9593756 | 1.6149460 | 1.7454645 | 15.716241 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 14.11624 | 13.74962 | 16.15231 | 13.70439 | 14.16652 | 59.54543 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+100x1000 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 105.732 | 114.414 | 121.3062 | 117.8415 | 123.2105 | 263.937 | 
| 1 | colCummins | 158.854 | 167.977 | 175.0069 | 174.0525 | 179.0625 | 222.749 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCummins | 1.502421 | 1.468151 | 1.442687 | 1.477005 | 1.453305 | 0.8439476 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093386 165.3    5709258 305.0  5709258 305.0
Vcells 5367315  41.0   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093380 165.3    5709258 305.0  5709258 305.0
Vcells 5417358  41.4   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.162515 | 0.1788920 | 0.1856476 | 0.1839145 | 0.1947555 | 0.240225 | 
| 2 | apply+cummin | 0.820809 | 0.8661755 | 1.0246917 | 0.8842115 | 0.9292215 | 6.773607 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cummin | 5.050666 | 4.841891 | 5.519552 | 4.807731 | 4.771221 | 28.19693 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.11277 | 0.1201740 | 0.1315573 | 0.1256540 | 0.138152 | 0.212913 | 
| 2 | apply+cummin | 0.84190 | 0.9042695 | 1.1115397 | 0.9316595 | 1.070702 | 6.950486 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cummin | 7.465638 | 7.524668 | 8.449092 | 7.414483 | 7.750177 | 32.64472 | 
Figure: Benchmarking of colCummins() and apply+cummin() on integer+1000x100 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on integer+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 112.770 | 120.174 | 131.5573 | 125.6540 | 138.1520 | 212.913 | 
| 1 | colCummins | 162.515 | 178.892 | 185.6476 | 183.9145 | 194.7555 | 240.225 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 1 | colCummins | 1.441119 | 1.488608 | 1.411154 | 1.463658 | 1.409719 | 1.128278 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093594 165.3    5709258 305.0  5709258 305.0
Vcells 5483033  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093579 165.3    5709258 305.0  5709258 305.0
Vcells 5483161  41.9   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.000989 | 0.0014075 | 0.0018475 | 0.0016745 | 0.0020315 | 0.010712 | 
| 2 | apply+cummin | 0.025063 | 0.0258085 | 0.0276814 | 0.0262400 | 0.0266105 | 0.127135 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 25.34176 | 18.33641 | 14.98352 | 15.67035 | 13.09894 | 11.86847 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.000998 | 0.001470 | 0.0018586 | 0.001811 | 0.0019680 | 0.013349 | 
| 2 | apply+cummin | 0.024260 | 0.025191 | 0.0266444 | 0.025475 | 0.0258035 | 0.126610 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.000000 | 
| 2 | apply+cummin | 24.30862 | 17.13673 | 14.33566 | 14.06681 | 13.11153 | 9.484606 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+10x10 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | colCummins | 989 | 1407.5 | 1847.46 | 1674.5 | 2031.5 | 10712 | 
| 2 | rowCummins | 998 | 1470.0 | 1858.61 | 1811.0 | 1968.0 | 13349 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.0000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 
| 2 | rowCummins | 1.0091 | 1.044405 | 1.006035 | 1.081517 | 0.9687423 | 1.246172 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093772 165.3    5709258 305.0  5709258 305.0
Vcells 5483858  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093766 165.3    5709258 305.0  5709258 305.0
Vcells 5493901  42.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.022917 | 0.0233255 | 0.0244423 | 0.0238125 | 0.0242985 | 0.061007 | 
| 2 | apply+cummin | 0.205522 | 0.2091620 | 0.2179182 | 0.2148140 | 0.2176295 | 0.355906 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 8.968102 | 8.967096 | 8.915618 | 9.02106 | 8.956499 | 5.833855 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.010483 | 0.011007 | 0.0117950 | 0.0113605 | 0.0118355 | 0.020724 | 
| 2 | apply+cummin | 0.164181 | 0.167555 | 0.1827565 | 0.1686450 | 0.1707395 | 0.540866 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 15.66164 | 15.22259 | 15.49439 | 14.84486 | 14.42605 | 26.09853 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+100x100 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 10.483 | 11.0070 | 11.79501 | 11.3605 | 11.8355 | 20.724 | 
| 1 | colCummins | 22.917 | 23.3255 | 24.44230 | 23.8125 | 24.2985 | 61.007 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 1 | colCummins | 2.186111 | 2.119151 | 2.072258 | 2.096078 | 2.053018 | 2.943785 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3093962 165.3    5709258 305.0  5709258 305.0
Vcells 5484756  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3093956 165.3    5709258 305.0  5709258 305.0
Vcells 5494799  42.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.024701 | 0.025327 | 0.0322288 | 0.026026 | 0.029233 | 0.318618 | 
| 2 | apply+cummin | 0.142403 | 0.144577 | 0.1739306 | 0.148498 | 0.173823 | 0.645888 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 5.76507 | 5.708414 | 5.396751 | 5.705756 | 5.946123 | 2.027155 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.011523 | 0.0123295 | 0.0134754 | 0.012906 | 0.013494 | 0.045830 | 
| 2 | apply+cummin | 0.101787 | 0.1032515 | 0.1087779 | 0.105236 | 0.108124 | 0.201244 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 8.833377 | 8.374346 | 8.072336 | 8.154037 | 8.012746 | 4.391097 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+1000x10 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 11.523 | 12.3295 | 13.47539 | 12.906 | 13.494 | 45.830 | 
| 1 | colCummins | 24.701 | 25.3270 | 32.22877 | 26.026 | 29.233 | 318.618 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 1 | colCummins | 2.143626 | 2.054179 | 2.391676 | 2.016581 | 2.16637 | 6.952171 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3094151 165.3    5709258 305.0  5709258 305.0
Vcells 5484882  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3094145 165.3    5709258 305.0  5709258 305.0
Vcells 5494925  42.0   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.013835 | 0.015416 | 0.0177544 | 0.0165575 | 0.0189475 | 0.031691 | 
| 2 | apply+cummin | 0.742210 | 0.818772 | 0.8809942 | 0.8505135 | 0.8700975 | 1.631995 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 
| 2 | apply+cummin | 53.64727 | 53.11183 | 49.62106 | 51.36727 | 45.92149 | 51.49711 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.010761 | 0.0122055 | 0.0132655 | 0.0128365 | 0.0135120 | 0.022581 | 
| 2 | apply+cummin | 0.740283 | 0.8152195 | 0.8307643 | 0.8303000 | 0.8441475 | 0.974474 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.0000 | 
| 2 | apply+cummin | 68.79314 | 66.79116 | 62.62603 | 64.68274 | 62.47391 | 43.1546 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+10x1000 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | rowCummins | 10.761 | 12.2055 | 13.26548 | 12.8365 | 13.5120 | 22.581 | 
| 1 | colCummins | 13.835 | 15.4160 | 17.75444 | 16.5575 | 18.9475 | 31.691 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 1 | colCummins | 1.285661 | 1.263037 | 1.338394 | 1.289877 | 1.402272 | 1.403436 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3094335 165.3    5709258 305.0  5709258 305.0
Vcells 5485934  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3094326 165.3    5709258 305.0  5709258 305.0
Vcells 5585972  42.7   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.215863 | 0.225439 | 0.2463868 | 0.2402555 | 0.260260 | 0.344222 | 
| 2 | apply+cummin | 1.877418 | 1.977949 | 2.4935509 | 2.1007760 | 2.409504 | 13.640032 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cummin | 8.697266 | 8.773764 | 10.12047 | 8.743925 | 9.258065 | 39.62568 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.088136 | 0.102374 | 0.2194747 | 0.111642 | 0.1239655 | 10.65944 | 
| 2 | apply+cummin | 1.488863 | 1.670075 | 2.1552832 | 1.889243 | 2.0837420 | 12.44535 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.00000 | 1.00000 | 1.000000 | 1.00000 | 1.00000 | 1.000000 | 
| 2 | apply+cummin | 16.89279 | 16.31347 | 9.820189 | 16.92233 | 16.80905 | 1.167543 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+100x1000 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 88.136 | 102.374 | 219.4747 | 111.6420 | 123.9655 | 10659.441 | 
| 1 | colCummins | 215.863 | 225.439 | 246.3868 | 240.2555 | 260.2600 | 344.222 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCummins | 2.449203 | 2.202112 | 1.12262 | 2.152017 | 2.099455 | 0.0322927 | 
Figure: Benchmarking of colCummins() and rowCummins() 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 3094528 165.3    5709258 305.0  5709258 305.0
Vcells 5486062  41.9   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCummins = colCummins(X), `apply+cummin` = apply(X, MARGIN = 2L, FUN = cummin), 
+     unit = "ms")
> X <- t(X)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3094522 165.3    5709258 305.0  5709258 305.0
Vcells 5586105  42.7   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCummins = rowCummins(X), `apply+cummin` = apply(X, MARGIN = 1L, FUN = cummin), 
+     unit = "ms")Table: Benchmarking of colCummins() and apply+cummin() 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 | colCummins | 0.234394 | 0.2622935 | 0.2848296 | 0.281013 | 0.2960725 | 0.562482 | 
| 2 | apply+cummin | 0.845419 | 0.9405685 | 1.1813183 | 1.023181 | 1.0878530 | 6.278719 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 
| 2 | apply+cummin | 3.606829 | 3.585939 | 4.147457 | 3.641043 | 3.674279 | 11.16252 | 
Table: Benchmarking of rowCummins() and apply+cummin() 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 | rowCummins | 0.091668 | 0.0989035 | 0.1663113 | 0.1115535 | 0.116757 | 5.822179 | 
| 2 | apply+cummin | 0.874420 | 0.9913885 | 1.1461032 | 1.0478420 | 1.108747 | 6.220861 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins | 1.000000 | 1.0000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | apply+cummin | 9.538989 | 10.0238 | 6.891311 | 9.393179 | 9.496197 | 1.068476 | 
Figure: Benchmarking of colCummins() and apply+cummin() on double+1000x100 data as well as rowCummins() and apply+cummin() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCummins() and rowCummins() on double+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCummins() and rowCummins() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 91.668 | 98.9035 | 166.3113 | 111.5535 | 116.7570 | 5822.179 | 
| 1 | colCummins | 234.394 | 262.2935 | 284.8295 | 281.0130 | 296.0725 | 562.482 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCummins | 2.556988 | 2.652014 | 1.712629 | 2.519087 | 2.535801 | 0.0966102 | 
Figure: Benchmarking of colCummins() and rowCummins() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

R version 3.6.1 Patched (2019-08-27 r77078)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS
Matrix products: default
BLAS:   /home/hb/software/R-devel/R-3-6-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-3-6-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-6    matrixStats_0.55.0-9000 ggplot2_3.2.1          
[4] knitr_1.24              R.devices_2.16.0        R.utils_2.9.0          
[7] R.oo_1.22.0             R.methodsS3_1.7.1       history_0.0.0-9002     
loaded via a namespace (and not attached):
 [1] Biobase_2.45.0       bit64_0.9-7          splines_3.6.1       
 [4] network_1.15         assertthat_0.2.1     highr_0.8           
 [7] stats4_3.6.1         blob_1.2.0           robustbase_0.93-5   
[10] pillar_1.4.2         RSQLite_2.1.2        backports_1.1.4     
[13] lattice_0.20-38      glue_1.3.1           digest_0.6.20       
[16] colorspace_1.4-1     sandwich_2.5-1       Matrix_1.2-17       
[19] XML_3.98-1.20        lpSolve_5.6.13.3     pkgconfig_2.0.2     
[22] genefilter_1.66.0    purrr_0.3.2          ergm_3.10.4         
[25] xtable_1.8-4         mvtnorm_1.0-11       scales_1.0.0        
[28] tibble_2.1.3         annotate_1.62.0      IRanges_2.18.2      
[31] TH.data_1.0-10       withr_2.1.2          BiocGenerics_0.30.0 
[34] lazyeval_0.2.2       mime_0.7             survival_2.44-1.1   
[37] magrittr_1.5         crayon_1.3.4         statnet.common_4.3.0
[40] memoise_1.1.0        laeken_0.5.0         R.cache_0.13.0      
[43] MASS_7.3-51.4        R.rsp_0.43.1         tools_3.6.1         
[46] multcomp_1.4-10      S4Vectors_0.22.1     trust_0.1-7         
[49] munsell_0.5.0        AnnotationDbi_1.46.1 compiler_3.6.1      
[52] rlang_0.4.0          grid_3.6.1           RCurl_1.95-4.12     
[55] cwhmisc_6.6          rappdirs_0.3.1       labeling_0.3        
[58] bitops_1.0-6         base64enc_0.1-3      boot_1.3-23         
[61] gtable_0.3.0         codetools_0.2-16     DBI_1.0.0           
[64] markdown_1.1         R6_2.4.0             zoo_1.8-6           
[67] dplyr_0.8.3          bit_1.1-14           zeallot_0.1.0       
[70] parallel_3.6.1       Rcpp_1.0.2           vctrs_0.2.0         
[73] DEoptimR_1.0-8       tidyselect_0.2.5     xfun_0.9            
[76] coda_0.19-3         Total processing time was 24.27 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colCummins')Copyright Henrik Bengtsson. Last updated on 2019-09-10 20:38:14 (-0700 UTC). Powered by RSP.
<script> var link = document.createElement('link'); link.rel = 'icon'; link.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA21BMVEUAAAAAAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8AAP8BAf4CAv0DA/wdHeIeHuEfH+AgIN8hId4lJdomJtknJ9g+PsE/P8BAQL9yco10dIt1dYp3d4h4eIeVlWqWlmmXl2iYmGeZmWabm2Tn5xjo6Bfp6Rb39wj4+Af//wA2M9hbAAAASXRSTlMAAQIJCgsMJSYnKD4/QGRlZmhpamtsbautrrCxuru8y8zN5ebn6Pn6+///////////////////////////////////////////LsUNcQAAAS9JREFUOI29k21XgkAQhVcFytdSMqMETU26UVqGmpaiFbL//xc1cAhhwVNf6n5i5z67M2dmYOyfJZUqlVLhkKucG7cgmUZTybDz6g0iDeq51PUr37Ds2cy2/C9NeES5puDjxuUk1xnToZsg8pfA3avHQ3lLIi7iWRrkv/OYtkScxBIMgDee0ALoyxHQBJ68JLCjOtQIMIANF7QG9G9fNnHvisCHBVMKgSJgiz7nE+AoBKrAPA3MgepvgR9TSCasrCKH0eB1wBGBFdCO+nAGjMVGPcQb5bd6mQRegN6+1axOs9nGfYcCtfi4NQosdtH7dB+txFIpXQqN1p9B/asRHToyS0jRgpV7nk4nwcq1BJ+x3Gl/v7S9Wmpp/aGquum7w3ZDyrADFYrl8vHBH+ev9AUASW1dmU4h4wAAAABJRU5ErkJggg==" document.getElementsByTagName('head')[0].appendChild(link); </script>