This report benchmark the performance of colMins() and rowMins() on subsetted computation.
> 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"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5255602 280.7 8529671 455.6 8529671 455.6
Vcells 10179002 77.7 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246833 280.3 8529671 455.6 8529671 455.6
Vcells 10150363 77.5 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.001824 | 0.0019145 | 0.0028551 | 0.0019550 | 0.0020350 | 0.088238 |
| 2 | colMins(X, rows, cols) | 0.002216 | 0.0023135 | 0.0024317 | 0.0023595 | 0.0024805 | 0.004936 |
| 3 | colMins(X[rows, cols]) | 0.002652 | 0.0028795 | 0.0030817 | 0.0029765 | 0.0031300 | 0.007775 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colMins(X, rows, cols) | 1.214912 | 1.208409 | 0.851675 | 1.206905 | 1.218919 | 0.0559396 |
| 3 | colMins(X[rows, cols]) | 1.453947 | 1.504048 | 1.079362 | 1.522506 | 1.538083 | 0.0881140 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.001895 | 0.001980 | 0.0021116 | 0.0020505 | 0.0021580 | 0.004468 |
| 2 | rowMins(X, cols, rows) | 0.002313 | 0.002386 | 0.0033428 | 0.0024475 | 0.0025790 | 0.087173 |
| 3 | rowMins(X[cols, rows]) | 0.002761 | 0.002978 | 0.0031251 | 0.0030610 | 0.0031565 | 0.005473 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins(X, cols, rows) | 1.220581 | 1.205051 | 1.583119 | 1.193611 | 1.195088 | 19.510519 |
| 3 | rowMins(X[cols, rows]) | 1.456992 | 1.504040 | 1.479982 | 1.492807 | 1.462697 | 1.224933 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+10x10 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 1.824 | 1.9145 | 2.85515 | 1.9550 | 2.035 | 88.238 |
| 2 | rowMins_X_S | 1.895 | 1.9800 | 2.11156 | 2.0505 | 2.158 | 4.468 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMins_X_S | 1.038925 | 1.034213 | 0.7395618 | 1.048849 | 1.060442 | 0.0506358 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5245449 280.2 8529671 455.6 8529671 455.6
Vcells 9819235 75.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5245425 280.2 8529671 455.6 8529671 455.6
Vcells 9824288 75.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 0.016246 | 0.0173075 | 0.0176170 | 0.0175725 | 0.0178660 | 0.021259 |
| 1 | colMins_X_S | 0.017303 | 0.0182985 | 0.0184890 | 0.0184670 | 0.0186440 | 0.023789 |
| 3 | colMins(X[rows, cols]) | 0.028228 | 0.0295035 | 0.0304097 | 0.0298320 | 0.0301315 | 0.061707 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.065062 | 1.057258 | 1.04950 | 1.050903 | 1.043546 | 1.119008 |
| 3 | colMins(X[rows, cols]) | 1.737535 | 1.704666 | 1.72616 | 1.697653 | 1.686527 | 2.902630 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 0.020058 | 0.0213765 | 0.0225047 | 0.0222750 | 0.0228580 | 0.045919 |
| 1 | rowMins_X_S | 0.022125 | 0.0234000 | 0.0241292 | 0.0243645 | 0.0247175 | 0.030877 |
| 3 | rowMins(X[cols, rows]) | 0.032824 | 0.0344555 | 0.0357612 | 0.0357735 | 0.0362945 | 0.050519 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | rowMins_X_S | 1.103051 | 1.09466 | 1.072184 | 1.093805 | 1.081350 | 0.6724232 |
| 3 | rowMins(X[cols, rows]) | 1.636454 | 1.61184 | 1.589050 | 1.605993 | 1.587825 | 1.1001764 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+100x100 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 17.303 | 18.2985 | 18.48900 | 18.4670 | 18.6440 | 23.789 |
| 2 | rowMins_X_S | 22.125 | 23.4000 | 24.12922 | 24.3645 | 24.7175 | 30.877 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.27868 | 1.278793 | 1.305058 | 1.319353 | 1.325762 | 1.297953 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246191 280.2 8529671 455.6 8529671 455.6
Vcells 9823276 75.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246167 280.2 8529671 455.6 8529671 455.6
Vcells 9828329 75.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.012624 | 0.0127975 | 0.0130295 | 0.0128785 | 0.0130165 | 0.022591 |
| 2 | colMins(X, rows, cols) | 0.013766 | 0.0141075 | 0.0145299 | 0.0143240 | 0.0146560 | 0.019234 |
| 3 | colMins(X[rows, cols]) | 0.024394 | 0.0247165 | 0.0253511 | 0.0249745 | 0.0251640 | 0.050858 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMins(X, rows, cols) | 1.090463 | 1.102364 | 1.115148 | 1.112241 | 1.125956 | 0.851401 |
| 3 | colMins(X[rows, cols]) | 1.932351 | 1.931354 | 1.945663 | 1.939240 | 1.933239 | 2.251250 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.021538 | 0.0224915 | 0.0231572 | 0.0227275 | 0.0237150 | 0.036367 |
| 2 | rowMins(X, cols, rows) | 0.020882 | 0.0220075 | 0.0226914 | 0.0228020 | 0.0232315 | 0.028191 |
| 3 | rowMins(X[cols, rows]) | 0.033943 | 0.0355290 | 0.0369136 | 0.0360005 | 0.0374970 | 0.071707 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.0000000 | 1.0000000 |
| 2 | rowMins(X, cols, rows) | 0.9695422 | 0.9784808 | 0.9798866 | 1.003278 | 0.9796121 | 0.7751808 |
| 3 | rowMins(X[cols, rows]) | 1.5759588 | 1.5796634 | 1.5940471 | 1.584006 | 1.5811512 | 1.9717601 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+1000x10 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 12.624 | 12.7975 | 13.02954 | 12.8785 | 13.0165 | 22.591 |
| 2 | rowMins_X_S | 21.538 | 22.4915 | 23.15717 | 22.7275 | 23.7150 | 36.367 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 |
| 2 | rowMins_X_S | 1.706115 | 1.757492 | 1.777282 | 1.764763 | 1.821918 | 1.6098 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246395 280.2 8529671 455.6 8529671 455.6
Vcells 9824092 75.0 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246371 280.2 8529671 455.6 8529671 455.6
Vcells 9829145 75.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.027145 | 0.030413 | 0.0311386 | 0.0310520 | 0.0317120 | 0.049130 |
| 2 | colMins(X, rows, cols) | 0.032023 | 0.034360 | 0.0360924 | 0.0356090 | 0.0374095 | 0.054955 |
| 3 | colMins(X[rows, cols]) | 0.040437 | 0.043705 | 0.0449355 | 0.0447285 | 0.0458695 | 0.058580 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMins(X, rows, cols) | 1.179702 | 1.12978 | 1.159087 | 1.146754 | 1.179664 | 1.118563 |
| 3 | colMins(X[rows, cols]) | 1.489667 | 1.43705 | 1.443078 | 1.440439 | 1.446440 | 1.192347 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.030415 | 0.0322585 | 0.0336089 | 0.0337605 | 0.0346190 | 0.050089 |
| 2 | rowMins(X, cols, rows) | 0.028900 | 0.0328595 | 0.0344084 | 0.0338655 | 0.0358275 | 0.063049 |
| 3 | rowMins(X[cols, rows]) | 0.040093 | 0.0430085 | 0.0450824 | 0.0450740 | 0.0467100 | 0.058829 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins(X, cols, rows) | 0.9501891 | 1.018631 | 1.023789 | 1.003110 | 1.034909 | 1.258739 |
| 3 | rowMins(X[cols, rows]) | 1.3181983 | 1.333246 | 1.341383 | 1.335111 | 1.349259 | 1.174489 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+10x1000 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 27.145 | 30.4130 | 31.13861 | 31.0520 | 31.712 | 49.130 |
| 2 | rowMins_X_S | 30.415 | 32.2585 | 33.60889 | 33.7605 | 34.619 | 50.089 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | rowMins_X_S | 1.120464 | 1.060681 | 1.079332 | 1.087225 | 1.091669 | 1.01952 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246608 280.2 8529671 455.6 8529671 455.6
Vcells 9846763 75.2 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246584 280.2 8529671 455.6 8529671 455.6
Vcells 9896816 75.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 0.098981 | 0.1108115 | 0.1220782 | 0.1182920 | 0.1350380 | 0.211816 |
| 1 | colMins_X_S | 0.104215 | 0.1201845 | 0.1315901 | 0.1284340 | 0.1429875 | 0.186393 |
| 3 | colMins(X[rows, cols]) | 0.172079 | 0.1982065 | 0.2196798 | 0.2150395 | 0.2381535 | 0.284584 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.052879 | 1.084585 | 1.077917 | 1.085737 | 1.058869 | 0.879976 |
| 3 | colMins(X[rows, cols]) | 1.738505 | 1.788682 | 1.799501 | 1.817870 | 1.763604 | 1.343544 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 0.119397 | 0.1233845 | 0.1430347 | 0.1374560 | 0.1559030 | 0.243470 |
| 1 | rowMins_X_S | 0.135333 | 0.1472975 | 0.1705212 | 0.1705720 | 0.1829455 | 0.239549 |
| 3 | rowMins(X[cols, rows]) | 0.197957 | 0.2138430 | 0.2458982 | 0.2423385 | 0.2661420 | 0.328259 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | rowMins_X_S | 1.133471 | 1.193809 | 1.192167 | 1.240921 | 1.173457 | 0.9838953 |
| 3 | rowMins(X[cols, rows]) | 1.657973 | 1.733143 | 1.719151 | 1.763026 | 1.707100 | 1.3482524 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+100x1000 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 104.215 | 120.1845 | 131.5901 | 128.434 | 142.9875 | 186.393 |
| 2 | rowMins_X_S | 135.333 | 147.2975 | 170.5212 | 170.572 | 182.9455 | 239.549 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.298594 | 1.225595 | 1.295851 | 1.328091 | 1.279451 | 1.285182 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246818 280.3 8529671 455.6 8529671 455.6
Vcells 9847530 75.2 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5246794 280.3 8529671 455.6 8529671 455.6
Vcells 9897583 75.6 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 0.073723 | 0.0784890 | 0.0864956 | 0.0828675 | 0.0915205 | 0.112950 |
| 1 | colMins_X_S | 0.081442 | 0.0870510 | 0.0939272 | 0.0903125 | 0.1003715 | 0.133458 |
| 3 | colMins(X[rows, cols]) | 0.155940 | 0.1666595 | 0.1831948 | 0.1729565 | 0.1990415 | 0.270186 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.104703 | 1.109085 | 1.085918 | 1.089842 | 1.096711 | 1.181567 |
| 3 | colMins(X[rows, cols]) | 2.115215 | 2.123349 | 2.117966 | 2.087145 | 2.174830 | 2.392085 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 0.105034 | 0.1174560 | 0.1336602 | 0.132533 | 0.1419420 | 0.248245 |
| 1 | rowMins_X_S | 0.125060 | 0.1356705 | 0.1562093 | 0.153204 | 0.1693875 | 0.210504 |
| 3 | rowMins(X[cols, rows]) | 0.191453 | 0.2076660 | 0.2399987 | 0.233307 | 0.2587460 | 0.332191 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | rowMins_X_S | 1.190662 | 1.155075 | 1.168705 | 1.155969 | 1.193357 | 0.8479687 |
| 3 | rowMins(X[cols, rows]) | 1.822772 | 1.768032 | 1.795588 | 1.760369 | 1.822899 | 1.3381579 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on integer+1000x100 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 81.442 | 87.0510 | 93.92716 | 90.3125 | 100.3715 | 133.458 |
| 2 | rowMins_X_S | 125.060 | 135.6705 | 156.20930 | 153.2040 | 169.3875 | 210.504 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.535571 | 1.558517 | 1.66309 | 1.696376 | 1.687606 | 1.577305 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() 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"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247036 280.3 8529671 455.6 8529671 455.6
Vcells 9938626 75.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247003 280.3 8529671 455.6 8529671 455.6
Vcells 9938764 75.9 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.001838 | 0.0019275 | 0.0021597 | 0.001980 | 0.0020700 | 0.016292 |
| 2 | colMins(X, rows, cols) | 0.002220 | 0.0023050 | 0.0024166 | 0.002356 | 0.0024585 | 0.004970 |
| 3 | colMins(X[rows, cols]) | 0.002677 | 0.0029595 | 0.0031801 | 0.003045 | 0.0031770 | 0.008924 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colMins(X, rows, cols) | 1.207835 | 1.195850 | 1.118950 | 1.189899 | 1.187681 | 0.3050577 |
| 3 | colMins(X[rows, cols]) | 1.456474 | 1.535409 | 1.472427 | 1.537879 | 1.534783 | 0.5477535 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.001897 | 0.0019800 | 0.0020982 | 0.0020360 | 0.0021405 | 0.004637 |
| 2 | rowMins(X, cols, rows) | 0.002291 | 0.0023705 | 0.0026435 | 0.0024425 | 0.0025465 | 0.018619 |
| 3 | rowMins(X[cols, rows]) | 0.002779 | 0.0030395 | 0.0033091 | 0.0031125 | 0.0032620 | 0.010612 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins(X, cols, rows) | 1.207696 | 1.197222 | 1.259864 | 1.199656 | 1.189675 | 4.015312 |
| 3 | rowMins(X[cols, rows]) | 1.464945 | 1.535101 | 1.577125 | 1.528733 | 1.523943 | 2.288549 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+10x10 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 1.838 | 1.9275 | 2.15974 | 1.980 | 2.0700 | 16.292 |
| 2 | rowMins_X_S | 1.897 | 1.9800 | 2.09821 | 2.036 | 2.1405 | 4.637 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.0000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMins_X_S | 1.0321 | 1.027237 | 0.9715105 | 1.028283 | 1.034058 | 0.2846182 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247234 280.3 8529671 455.6 8529671 455.6
Vcells 9944566 75.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247210 280.3 8529671 455.6 8529671 455.6
Vcells 9954619 76.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 0.017388 | 0.018709 | 0.0193960 | 0.0194430 | 0.0197540 | 0.026693 |
| 1 | colMins_X_S | 0.019686 | 0.020248 | 0.0209610 | 0.0209495 | 0.0212135 | 0.028075 |
| 3 | colMins(X[rows, cols]) | 0.035459 | 0.036099 | 0.0376484 | 0.0373310 | 0.0376300 | 0.081881 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.13216 | 1.082260 | 1.080689 | 1.077483 | 1.073884 | 1.051774 |
| 3 | colMins(X[rows, cols]) | 2.03928 | 1.929499 | 1.941036 | 1.920023 | 1.904931 | 3.067508 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.019915 | 0.0211350 | 0.0216981 | 0.0215095 | 0.0221730 | 0.028498 |
| 2 | rowMins(X, cols, rows) | 0.020550 | 0.0214005 | 0.0225884 | 0.0219840 | 0.0226715 | 0.051804 |
| 3 | rowMins(X[cols, rows]) | 0.035124 | 0.0369345 | 0.0378889 | 0.0373850 | 0.0385780 | 0.052682 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins(X, cols, rows) | 1.031886 | 1.012562 | 1.041032 | 1.022060 | 1.022482 | 1.817812 |
| 3 | rowMins(X[cols, rows]) | 1.763696 | 1.747551 | 1.746183 | 1.738069 | 1.739864 | 1.848621 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+100x100 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 19.686 | 20.248 | 20.96105 | 20.9495 | 21.2135 | 28.075 |
| 2 | rowMins_X_S | 19.915 | 21.135 | 21.69812 | 21.5095 | 22.1730 | 28.498 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.011633 | 1.043807 | 1.035164 | 1.026731 | 1.045231 | 1.015067 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247433 280.3 8529671 455.6 8529671 455.6
Vcells 9945961 75.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247409 280.3 8529671 455.6 8529671 455.6
Vcells 9956014 76.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.016357 | 0.0169535 | 0.0174170 | 0.0170480 | 0.0172185 | 0.031485 |
| 2 | colMins(X, rows, cols) | 0.017032 | 0.0179310 | 0.0181883 | 0.0182175 | 0.0183750 | 0.022566 |
| 3 | colMins(X[rows, cols]) | 0.032399 | 0.0338045 | 0.0342687 | 0.0341165 | 0.0342590 | 0.062102 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colMins(X, rows, cols) | 1.041267 | 1.057658 | 1.044284 | 1.068600 | 1.067166 | 0.7167222 |
| 3 | colMins(X[rows, cols]) | 1.980742 | 1.993954 | 1.967550 | 2.001203 | 1.989662 | 1.9724313 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.017693 | 0.0186045 | 0.0193016 | 0.0190875 | 0.0197155 | 0.033773 |
| 2 | rowMins(X, cols, rows) | 0.020590 | 0.0218915 | 0.0228138 | 0.0227640 | 0.0234500 | 0.028774 |
| 3 | rowMins(X[cols, rows]) | 0.035052 | 0.0368290 | 0.0391780 | 0.0381565 | 0.0397365 | 0.074442 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMins(X, cols, rows) | 1.163737 | 1.176678 | 1.181969 | 1.192613 | 1.189420 | 0.8519824 |
| 3 | rowMins(X[cols, rows]) | 1.981122 | 1.979575 | 2.029785 | 1.999031 | 2.015495 | 2.2041868 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+1000x10 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 16.357 | 16.9535 | 17.41696 | 17.0480 | 17.2185 | 31.485 |
| 2 | rowMins_X_S | 17.693 | 18.6045 | 19.30155 | 19.0875 | 19.7155 | 33.773 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.081678 | 1.097384 | 1.108204 | 1.119633 | 1.145018 | 1.072669 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247637 280.3 8529671 455.6 8529671 455.6
Vcells 9946096 75.9 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247613 280.3 8529671 455.6 8529671 455.6
Vcells 9956149 76.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.030396 | 0.0331165 | 0.0341850 | 0.0340105 | 0.0348855 | 0.057655 |
| 2 | colMins(X, rows, cols) | 0.029013 | 0.0336240 | 0.0360027 | 0.0352750 | 0.0379075 | 0.060231 |
| 3 | colMins(X[rows, cols]) | 0.048585 | 0.0521060 | 0.0536512 | 0.0538440 | 0.0548405 | 0.066291 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colMins(X, rows, cols) | 0.9545006 | 1.015325 | 1.053173 | 1.037180 | 1.086626 | 1.044680 |
| 3 | colMins(X[rows, cols]) | 1.5984011 | 1.573415 | 1.569437 | 1.583158 | 1.572014 | 1.149787 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | rowMins_X_S | 0.029790 | 0.0319780 | 0.0329715 | 0.0326920 | 0.0340190 | 0.041739 |
| 2 | rowMins(X, cols, rows) | 0.026884 | 0.0339335 | 0.0361346 | 0.0358535 | 0.0377485 | 0.081865 |
| 3 | rowMins(X[cols, rows]) | 0.044573 | 0.0481225 | 0.0497464 | 0.0498195 | 0.0512985 | 0.059541 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowMins_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins(X, cols, rows) | 0.9024505 | 1.061151 | 1.095932 | 1.096706 | 1.109630 | 1.961355 |
| 3 | rowMins(X[cols, rows]) | 1.4962403 | 1.504863 | 1.508770 | 1.523905 | 1.507937 | 1.426508 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+10x1000 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | rowMins_X_S | 29.790 | 31.9780 | 32.97152 | 32.6920 | 34.0190 | 41.739 |
| 1 | colMins_X_S | 30.396 | 33.1165 | 34.18499 | 34.0105 | 34.8855 | 57.655 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.020342 | 1.035603 | 1.036804 | 1.040331 | 1.025471 | 1.381322 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247850 280.3 8529671 455.6 8529671 455.6
Vcells 9991541 76.3 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5247826 280.3 8529671 455.6 8529671 455.6
Vcells 10091594 77.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | colMins_X_S | 0.118586 | 0.132462 | 0.1521474 | 0.1495030 | 0.1661150 | 0.227501 |
| 2 | colMins(X, rows, cols) | 0.122183 | 0.132991 | 0.1518777 | 0.1500845 | 0.1606015 | 0.278352 |
| 3 | colMins(X[rows, cols]) | 0.213240 | 0.239611 | 0.2759704 | 0.2702650 | 0.2984635 | 0.395115 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 |
| 2 | colMins(X, rows, cols) | 1.030332 | 1.003994 | 0.998227 | 1.003890 | 0.9668091 | 1.223520 |
| 3 | colMins(X[rows, cols]) | 1.798189 | 1.808904 | 1.813835 | 1.807756 | 1.7967282 | 1.736762 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 0.132620 | 0.1370405 | 0.1587292 | 0.1517905 | 0.1722215 | 0.308469 |
| 1 | rowMins_X_S | 0.126679 | 0.1375235 | 0.1588114 | 0.1587335 | 0.1722160 | 0.245443 |
| 3 | rowMins(X[cols, rows]) | 0.218846 | 0.2326025 | 0.2707474 | 0.2678340 | 0.2956165 | 0.385106 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.0000000 |
| 1 | rowMins_X_S | 0.9552028 | 1.003524 | 1.000517 | 1.045741 | 0.9999681 | 0.7956813 |
| 3 | rowMins(X[cols, rows]) | 1.6501734 | 1.697327 | 1.705718 | 1.764498 | 1.7164901 | 1.2484431 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+100x1000 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 118.586 | 132.4620 | 152.1474 | 149.5030 | 166.115 | 227.501 |
| 2 | rowMins_X_S | 126.679 | 137.5235 | 158.8114 | 158.7335 | 172.216 | 245.443 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowMins_X_S | 1.068246 | 1.038211 | 1.043799 | 1.061741 | 1.036728 | 1.078866 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> rows <- sample.int(nrow(X), size = nrow(X) * 0.7)
> cols <- sample.int(ncol(X), size = ncol(X) * 0.7)
> X_S <- X[rows, cols]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5248060 280.3 8529671 455.6 8529671 455.6
Vcells 9991682 76.3 31876688 243.2 60562128 462.1
> colStats <- microbenchmark(colMins_X_S = colMins(X_S, na.rm = FALSE), `colMins(X, rows, cols)` = colMins(X,
+ rows = rows, cols = cols, na.rm = FALSE), `colMins(X[rows, cols])` = colMins(X[rows, cols], na.rm = FALSE),
+ unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5248036 280.3 8529671 455.6 8529671 455.6
Vcells 10091735 77.0 31876688 243.2 60562128 462.1
> rowStats <- microbenchmark(rowMins_X_S = rowMins(X_S, na.rm = FALSE), `rowMins(X, cols, rows)` = rowMins(X,
+ rows = cols, cols = rows, na.rm = FALSE), `rowMins(X[cols, rows])` = rowMins(X[cols, rows], na.rm = FALSE),
+ unit = "ms")
Table: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 0.091964 | 0.1034160 | 0.1141226 | 0.1105280 | 0.1181925 | 0.170529 |
| 1 | colMins_X_S | 0.099554 | 0.1102085 | 0.1213548 | 0.1190625 | 0.1273965 | 0.195952 |
| 3 | colMins(X[rows, cols]) | 0.197339 | 0.2213435 | 0.2450470 | 0.2387210 | 0.2648765 | 0.403472 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colMins(X, rows, cols) | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colMins_X_S | 1.082532 | 1.065681 | 1.063372 | 1.077216 | 1.077873 | 1.149083 |
| 3 | colMins(X[rows, cols]) | 2.145829 | 2.140322 | 2.147227 | 2.159824 | 2.241060 | 2.366002 |
Table: Benchmarking of rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 0.110872 | 0.124601 | 0.1416099 | 0.140200 | 0.1502035 | 0.306694 |
| 1 | rowMins_X_S | 0.111578 | 0.120331 | 0.1399997 | 0.141158 | 0.1514435 | 0.194540 |
| 3 | rowMins(X[cols, rows]) | 0.204501 | 0.225596 | 0.2596275 | 0.254827 | 0.2890105 | 0.357487 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowMins(X, cols, rows) | 1.000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | rowMins_X_S | 1.006368 | 0.9657306 | 0.9886291 | 1.006833 | 1.008255 | 0.634313 |
| 3 | rowMins(X[cols, rows]) | 1.844478 | 1.8105473 | 1.8333996 | 1.817596 | 1.924126 | 1.165615 |
Figure: Benchmarking of colMins_X_S(), colMins(X, rows, cols)() and colMins(X[rows, cols])() on double+1000x100 data as well as rowMins_X_S(), rowMins(X, cols, rows)() and rowMins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colMins_X_S() and rowMins_X_S() 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 | colMins_X_S | 99.554 | 110.2085 | 121.3548 | 119.0625 | 127.3965 | 195.952 |
| 2 | rowMins_X_S | 111.578 | 120.3310 | 139.9997 | 141.1580 | 151.4435 | 194.540 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colMins_X_S | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowMins_X_S | 1.120779 | 1.091849 | 1.15364 | 1.185579 | 1.188757 | 0.9927942 |
Figure: Benchmarking of colMins_X_S() and rowMins_X_S() 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.4 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowMins_subset')
Copyright Dongcan Jiang. Last updated on 2021-08-25 19:00:50 (+0200 UTC). Powered by RSP.