This report benchmark the performance of colOrderStats() and rowOrderStats() against alternative methods.
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268993 281.4 7916910 422.9 7916910 422.9
Vcells 10308904 78.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268593 281.4 7916910 422.9 7916910 422.9
Vcells 10308148 78.7 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.002696 | 0.0040795 | 0.0068101 | 0.0076690 | 0.0082185 | 0.023402 |
| 3 | rowQ(t(X)) | 0.012791 | 0.0170745 | 0.0231401 | 0.0242875 | 0.0264040 | 0.095805 |
| 2 | apply+quantile | 0.967434 | 0.9957945 | 1.1205770 | 1.0281635 | 1.2197775 | 1.863193 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 4.744436 | 4.185439 | 3.397911 | 3.166971 | 3.212752 | 4.093881 |
| 2 | apply+quantile | 358.840505 | 244.097193 | 164.546098 | 134.067479 | 148.418507 | 79.616828 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.003241 | 0.0047355 | 0.0073055 | 0.0078115 | 0.0086075 | 0.025496 |
| 3 | rowQ | 0.009712 | 0.0126775 | 0.0182256 | 0.0182200 | 0.0215470 | 0.085881 |
| 2 | apply+quantile | 0.971351 | 0.9916710 | 1.1221177 | 1.0329925 | 1.2133460 | 1.988212 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.996606 | 2.67712 | 2.494763 | 2.332459 | 2.503282 | 3.368411 |
| 2 | apply+quantile | 299.707189 | 209.41210 | 153.598182 | 132.239967 | 140.963811 | 77.981330 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+10x10 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 2.696 | 4.0795 | 6.81011 | 7.6690 | 8.2185 | 23.402 |
| 2 | rowOrderStats | 3.241 | 4.7355 | 7.30554 | 7.8115 | 8.6075 | 25.496 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowOrderStats | 1.202151 | 1.160804 | 1.072749 | 1.018581 | 1.047332 | 1.089479 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5267154 281.3 7916910 422.9 7916910 422.9
Vcells 9924721 75.8 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5267141 281.3 7916910 422.9 7916910 422.9
Vcells 9929817 75.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.112696 | 0.1198725 | 0.1333702 | 0.1301970 | 0.139149 | 0.228078 |
| 3 | rowQ(t(X)) | 0.262352 | 0.2933835 | 0.3195194 | 0.3156015 | 0.338109 | 0.516138 |
| 2 | apply+quantile | 9.852266 | 10.3477290 | 11.2146593 | 10.6187180 | 10.960147 | 21.946198 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.327962 | 2.447463 | 2.395733 | 2.424031 | 2.429834 | 2.262989 |
| 2 | apply+quantile | 87.423387 | 86.322793 | 84.086682 | 81.558853 | 78.765543 | 96.222336 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.114631 | 0.123835 | 0.1378341 | 0.1363480 | 0.143007 | 0.216123 |
| 3 | rowQ | 0.251249 | 0.267076 | 0.2964444 | 0.2872305 | 0.308534 | 0.480030 |
| 2 | apply+quantile | 9.892499 | 10.383088 | 11.3716474 | 10.6375765 | 11.341401 | 31.489385 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.191807 | 2.156709 | 2.150733 | 2.106599 | 2.157475 | 2.221096 |
| 2 | apply+quantile | 86.298637 | 83.846146 | 82.502430 | 78.017840 | 79.306611 | 145.701221 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+100x100 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 112.696 | 119.8725 | 133.3702 | 130.197 | 139.149 | 228.078 |
| 2 | rowOrderStats | 114.631 | 123.8350 | 137.8341 | 136.348 | 143.007 | 216.123 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.00000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowOrderStats | 1.01717 | 1.033056 | 1.03347 | 1.047244 | 1.027726 | 0.9475837 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5267906 281.4 7916910 422.9 7916910 422.9
Vcells 9928491 75.8 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5267893 281.4 7916910 422.9 7916910 422.9
Vcells 9933587 75.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.098422 | 0.104614 | 0.118827 | 0.1064520 | 0.1326415 | 0.187660 |
| 3 | rowQ(t(X)) | 0.248614 | 0.259805 | 0.293965 | 0.2642845 | 0.3266160 | 0.467678 |
| 2 | apply+quantile | 1.296365 | 1.330771 | 1.483508 | 1.3457475 | 1.5813485 | 2.455765 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.0000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.5260 | 2.483463 | 2.47389 | 2.482664 | 2.462397 | 2.492156 |
| 2 | apply+quantile | 13.1715 | 12.720773 | 12.48460 | 12.641825 | 11.921974 | 13.086246 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.102752 | 0.1091865 | 0.1258468 | 0.118961 | 0.1349435 | 0.199299 |
| 3 | rowQ | 0.234847 | 0.2428325 | 0.2709517 | 0.247500 | 0.2789235 | 0.437303 |
| 2 | apply+quantile | 1.287010 | 1.3353315 | 1.5055949 | 1.393209 | 1.6603835 | 2.479970 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.285571 | 2.224016 | 2.153028 | 2.080514 | 2.066965 | 2.194206 |
| 2 | apply+quantile | 12.525401 | 12.229822 | 11.963714 | 11.711477 | 12.304287 | 12.443464 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+1000x10 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 98.422 | 104.6140 | 118.8270 | 106.452 | 132.6415 | 187.660 |
| 2 | rowOrderStats | 102.752 | 109.1865 | 125.8468 | 118.961 | 134.9435 | 199.299 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowOrderStats | 1.043994 | 1.043708 | 1.059076 | 1.117508 | 1.017355 | 1.062022 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5268119 281.4 7916910 422.9 7916910 422.9
Vcells 9929302 75.8 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268106 281.4 7916910 422.9 7916910 422.9
Vcells 9934398 75.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.106230 | 0.1184025 | 0.1325111 | 0.1353985 | 0.1408785 | 0.169106 |
| 3 | rowQ(t(X)) | 0.262032 | 0.2868610 | 0.3188044 | 0.3226335 | 0.3341315 | 0.626759 |
| 2 | apply+quantile | 96.181601 | 99.3469295 | 106.3187530 | 101.5473330 | 113.0622695 | 155.929175 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.466648 | 2.422761 | 2.405869 | 2.382844 | 2.371771 | 3.706309 |
| 2 | apply+quantile | 905.409028 | 839.061080 | 802.338408 | 749.988611 | 802.551628 | 922.079495 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.110268 | 0.119608 | 0.1342096 | 0.1360050 | 0.1418945 | 0.224281 |
| 3 | rowQ | 0.244519 | 0.267329 | 0.2898009 | 0.2979575 | 0.3066390 | 0.363698 |
| 2 | apply+quantile | 95.641533 | 98.592619 | 105.7131246 | 102.1516005 | 110.3810980 | 139.159159 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.217497 | 2.235043 | 2.159316 | 2.190783 | 2.161035 | 1.621617 |
| 2 | apply+quantile | 867.355289 | 824.297860 | 787.671797 | 751.087096 | 777.909630 | 620.467891 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+10x1000 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 106.230 | 118.4025 | 132.5111 | 135.3985 | 140.8785 | 169.106 |
| 2 | rowOrderStats | 110.268 | 119.6080 | 134.2096 | 136.0050 | 141.8945 | 224.281 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowOrderStats | 1.038012 | 1.010181 | 1.012818 | 1.004479 | 1.007212 | 1.326275 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5268317 281.4 7916910 422.9 7916910 422.9
Vcells 9929864 75.8 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268310 281.4 7916910 422.9 7916910 422.9
Vcells 9979970 76.2 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 1.094231 | 1.136381 | 1.163202 | 1.147848 | 1.169412 | 1.408941 |
| 3 | rowQ(t(X)) | 2.580665 | 2.743460 | 2.815210 | 2.796856 | 2.857670 | 3.469139 |
| 2 | apply+quantile | 99.850530 | 102.400393 | 111.541354 | 105.009742 | 113.243274 | 479.710773 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.358428 | 2.414207 | 2.420225 | 2.436608 | 2.44368 | 2.462232 |
| 2 | apply+quantile | 91.251783 | 90.110929 | 95.891670 | 91.484014 | 96.83775 | 340.476126 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 1.106748 | 1.143976 | 1.257766 | 1.178274 | 1.361804 | 1.843151 |
| 3 | rowQ | 2.467096 | 2.595877 | 2.759856 | 2.657094 | 2.731810 | 3.781953 |
| 2 | apply+quantile | 98.673225 | 101.006087 | 108.751764 | 103.918194 | 114.444600 | 133.235542 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.22914 | 2.269171 | 2.194252 | 2.255073 | 2.006023 | 2.051895 |
| 2 | apply+quantile | 89.15600 | 88.293886 | 86.464198 | 88.195270 | 84.038966 | 72.286829 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+100x1000 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 1.094231 | 1.136381 | 1.163202 | 1.147848 | 1.169412 | 1.408941 |
| 2 | rowOrderStats | 1.106748 | 1.143976 | 1.257766 | 1.178274 | 1.361804 | 1.843151 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowOrderStats | 1.011439 | 1.006683 | 1.081297 | 1.026507 | 1.16452 | 1.308182 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5268523 281.4 7916910 422.9 7916910 422.9
Vcells 9930551 75.8 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268516 281.4 7916910 422.9 7916910 422.9
Vcells 9980657 76.2 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 1.000228 | 1.031149 | 1.085712 | 1.049727 | 1.064769 | 1.664438 |
| 3 | rowQ(t(X)) | 2.456597 | 2.544971 | 2.637770 | 2.604957 | 2.641396 | 3.699383 |
| 2 | apply+quantile | 12.478874 | 12.736728 | 13.620464 | 13.066946 | 13.445725 | 23.872654 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.456037 | 2.468091 | 2.429529 | 2.481556 | 2.480721 | 2.222602 |
| 2 | apply+quantile | 12.476029 | 12.351970 | 12.545187 | 12.447947 | 12.627827 | 14.342772 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 1.048300 | 1.066629 | 1.108719 | 1.080034 | 1.098993 | 1.391298 |
| 3 | rowQ | 2.315365 | 2.386404 | 2.474760 | 2.419234 | 2.468002 | 3.200212 |
| 2 | apply+quantile | 12.497515 | 12.707541 | 13.419533 | 12.870615 | 13.129853 | 24.063661 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 2.208686 | 2.237332 | 2.23209 | 2.239962 | 2.245694 | 2.300163 |
| 2 | apply+quantile | 11.921697 | 11.913735 | 12.10364 | 11.916866 | 11.947167 | 17.295835 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on integer+1000x100 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 1.000228 | 1.031149 | 1.085712 | 1.049727 | 1.064769 | 1.664438 |
| 2 | rowOrderStats | 1.048300 | 1.066629 | 1.108719 | 1.080034 | 1.098993 | 1.391298 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowOrderStats | 1.048061 | 1.034408 | 1.02119 | 1.028871 | 1.032142 | 0.8358966 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5268737 281.4 7916910 422.9 7916910 422.9
Vcells 10046448 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268721 281.4 7916910 422.9 7916910 422.9
Vcells 10046639 76.7 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.003037 | 0.0045715 | 0.0076381 | 0.0077320 | 0.009290 | 0.023805 |
| 3 | rowQ(t(X)) | 0.007160 | 0.0099600 | 0.0155814 | 0.0153995 | 0.017574 | 0.063005 |
| 2 | apply+quantile | 0.973489 | 0.9986500 | 1.1800871 | 1.0863325 | 1.255721 | 2.261965 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 2.35759 | 2.178716 | 2.039951 | 1.991658 | 1.891711 | 2.646713 |
| 2 | apply+quantile | 320.54297 | 218.451274 | 154.499481 | 140.498254 | 135.169107 | 95.020584 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.003124 | 0.0049355 | 0.0074758 | 0.007844 | 0.0088045 | 0.024017 |
| 3 | rowQ | 0.004296 | 0.0057030 | 0.0094352 | 0.008322 | 0.0117090 | 0.041540 |
| 2 | apply+quantile | 0.962671 | 0.9832850 | 1.1041419 | 1.003078 | 1.2174365 | 1.869213 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 1.37516 | 1.155506 | 1.262093 | 1.060938 | 1.329888 | 1.729608 |
| 2 | apply+quantile | 308.15333 | 199.227029 | 147.695090 | 127.878442 | 138.274348 | 77.828746 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+10x10 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 3.037 | 4.5715 | 7.63813 | 7.732 | 9.2900 | 23.805 |
| 2 | rowOrderStats | 3.124 | 4.9355 | 7.47582 | 7.844 | 8.8045 | 24.017 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.0000000 | 1.000000 |
| 2 | rowOrderStats | 1.028647 | 1.079624 | 0.97875 | 1.014485 | 0.9477395 | 1.008906 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5268939 281.4 7916910 422.9 7916910 422.9
Vcells 10047454 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5268926 281.4 7916910 422.9 7916910 422.9
Vcells 10057550 76.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.159234 | 0.164046 | 0.1781320 | 0.171400 | 0.1813475 | 0.296304 |
| 3 | rowQ(t(X)) | 0.200370 | 0.207436 | 0.2308721 | 0.228722 | 0.2434720 | 0.389825 |
| 2 | apply+quantile | 9.790375 | 9.918190 | 10.6659672 | 10.095773 | 10.4156785 | 19.801831 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 1.258337 | 1.264499 | 1.296073 | 1.334434 | 1.342572 | 1.315625 |
| 2 | apply+quantile | 61.484199 | 60.459813 | 59.876751 | 58.901829 | 57.434916 | 66.829442 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.158055 | 0.1641440 | 0.1756856 | 0.1724485 | 0.178935 | 0.279081 |
| 3 | rowQ | 0.182181 | 0.1850165 | 0.2008740 | 0.1970900 | 0.208571 | 0.340016 |
| 2 | apply+quantile | 9.799377 | 9.9113060 | 10.6413272 | 10.0514415 | 10.304956 | 19.579858 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 1.152643 | 1.12716 | 1.143371 | 1.142892 | 1.165624 | 1.218342 |
| 2 | apply+quantile | 61.999791 | 60.38177 | 60.570273 | 58.286628 | 57.590497 | 70.158334 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+100x100 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 159.234 | 164.046 | 178.1320 | 171.4000 | 181.3475 | 296.304 |
| 2 | rowOrderStats | 158.055 | 164.144 | 175.6856 | 172.4485 | 178.9350 | 279.081 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.0000000 | 1.000000 | 1.0000000 | 1.000000 | 1.0000000 | 1.0000000 |
| 2 | rowOrderStats | 0.9925958 | 1.000597 | 0.9862664 | 1.006117 | 0.9866968 | 0.9418739 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5269142 281.5 7916910 422.9 7916910 422.9
Vcells 10048535 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5269135 281.5 7916910 422.9 7916910 422.9
Vcells 10058641 76.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.142024 | 0.1461710 | 0.1578909 | 0.1475745 | 0.1641990 | 0.239373 |
| 3 | rowQ(t(X)) | 0.183253 | 0.1886075 | 0.2020745 | 0.1912965 | 0.2098465 | 0.314868 |
| 2 | apply+quantile | 1.336363 | 1.3544730 | 1.4502797 | 1.3682845 | 1.4041375 | 2.435306 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 1.290296 | 1.290321 | 1.279836 | 1.296271 | 1.278001 | 1.315386 |
| 2 | apply+quantile | 9.409417 | 9.266359 | 9.185327 | 9.271822 | 8.551438 | 10.173687 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.143845 | 0.1473475 | 0.1602536 | 0.1504175 | 0.1648415 | 0.235791 |
| 3 | rowQ | 0.165287 | 0.1677205 | 0.1785729 | 0.1710720 | 0.1724895 | 0.273577 |
| 2 | apply+quantile | 1.337604 | 1.3558695 | 1.4447214 | 1.3651035 | 1.4166895 | 2.374248 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 1.149063 | 1.138265 | 1.114314 | 1.137315 | 1.046396 | 1.160252 |
| 2 | apply+quantile | 9.298926 | 9.201849 | 9.015218 | 9.075430 | 8.594253 | 10.069290 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+1000x10 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 142.024 | 146.1710 | 157.8909 | 147.5745 | 164.1990 | 239.373 |
| 2 | rowOrderStats | 143.845 | 147.3475 | 160.2536 | 150.4175 | 164.8415 | 235.791 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowOrderStats | 1.012822 | 1.008049 | 1.014964 | 1.019265 | 1.003913 | 0.9850359 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5269361 281.5 7916910 422.9 7916910 422.9
Vcells 10048689 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5269348 281.5 7916910 422.9 7916910 422.9
Vcells 10058785 76.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 0.154163 | 0.162138 | 0.1819935 | 0.177852 | 0.1932265 | 0.381979 |
| 3 | rowQ(t(X)) | 0.195936 | 0.202935 | 0.2373036 | 0.238204 | 0.2505650 | 0.420127 |
| 2 | apply+quantile | 92.160882 | 94.907494 | 104.1634842 | 103.480934 | 111.8881590 | 147.368139 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 1.270966 | 1.251619 | 1.303913 | 1.339338 | 1.296742 | 1.099869 |
| 2 | apply+quantile | 597.814534 | 585.350097 | 572.347246 | 581.837334 | 579.051833 | 385.801678 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 0.152145 | 0.155938 | 0.1818978 | 0.1711180 | 0.1938690 | 0.284398 |
| 3 | rowQ | 0.178293 | 0.185625 | 0.2130232 | 0.2082955 | 0.2244185 | 0.374109 |
| 2 | apply+quantile | 92.913468 | 95.367881 | 109.1533500 | 104.0716180 | 112.7420030 | 469.248856 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ | 1.171862 | 1.190377 | 1.171115 | 1.217262 | 1.157578 | 1.315442 |
| 2 | apply+quantile | 610.690249 | 611.575636 | 600.080749 | 608.186269 | 581.537033 | 1649.972419 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+10x1000 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | rowOrderStats | 152.145 | 155.938 | 181.8978 | 171.118 | 193.8690 | 284.398 |
| 1 | colOrderStats | 154.163 | 162.138 | 181.9935 | 177.852 | 193.2265 | 381.979 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 |
| 1 | colOrderStats | 1.013264 | 1.039759 | 1.000526 | 1.039353 | 0.9966859 | 1.343114 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5269559 281.5 7916910 422.9 7916910 422.9
Vcells 10049953 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5269552 281.5 7916910 422.9 7916910 422.9
Vcells 10150059 77.5 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 1.555946 | 1.593685 | 1.705558 | 1.639018 | 1.762477 | 2.196162 |
| 3 | rowQ(t(X)) | 1.977714 | 2.047141 | 2.196313 | 2.124277 | 2.263879 | 2.796600 |
| 2 | apply+quantile | 99.757448 | 102.091683 | 112.674087 | 111.503829 | 120.630390 | 141.425606 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 1.271068 | 1.284533 | 1.287738 | 1.296067 | 1.284488 | 1.273403 |
| 2 | apply+quantile | 64.113696 | 64.060139 | 66.062878 | 68.030896 | 68.443687 | 64.396709 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 1.554991 | 1.632132 | 1.830091 | 1.796809 | 1.974303 | 2.697267 |
| 3 | rowQ | 1.784679 | 1.919428 | 2.117967 | 2.011407 | 2.316472 | 2.942045 |
| 2 | apply+quantile | 99.274605 | 102.748784 | 113.301328 | 109.262997 | 122.898668 | 153.237316 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 3 | rowQ | 1.14771 | 1.176025 | 1.157301 | 1.119433 | 1.173311 | 1.09075 |
| 2 | apply+quantile | 63.84256 | 62.953722 | 61.910211 | 60.809484 | 62.249126 | 56.81207 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+100x1000 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 1.555946 | 1.593685 | 1.705558 | 1.639018 | 1.762477 | 2.196162 |
| 2 | rowOrderStats | 1.554991 | 1.632132 | 1.830091 | 1.796809 | 1.974303 | 2.697267 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowOrderStats | 0.9993862 | 1.024125 | 1.073016 | 1.096272 | 1.120187 | 1.228173 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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 5269765 281.5 7916910 422.9 7916910 422.9
Vcells 10050090 76.7 33191153 253.3 53339345 407.0
> probs <- 0.3
> which <- round(probs * nrow(X))
> colStats <- microbenchmark(colOrderStats = colOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 2L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), `rowQ(t(X))` = rowQ(t(X),
+ which = which), unit = "ms")
> X <- t(X)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5269758 281.5 7916910 422.9 7916910 422.9
Vcells 10150196 77.5 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowOrderStats = rowOrderStats(X, which = which, na.rm = FALSE), `apply+quantile` = apply(X,
+ MARGIN = 1L, FUN = quantile, probs = probs, na.rm = FALSE, type = 3L), rowQ = rowQ(X, which = which),
+ unit = "ms")
Table: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() 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 | colOrderStats | 1.539583 | 1.578974 | 1.684997 | 1.616098 | 1.686859 | 2.587708 |
| 3 | rowQ(t(X)) | 1.947817 | 2.044525 | 2.186409 | 2.152943 | 2.250532 | 2.861674 |
| 2 | apply+quantile | 13.097905 | 13.304177 | 18.186724 | 13.550524 | 14.384415 | 401.092755 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | rowQ(t(X)) | 1.265159 | 1.294844 | 1.297574 | 1.332186 | 1.334155 | 1.105872 |
| 2 | apply+quantile | 8.507437 | 8.425834 | 10.793326 | 8.384717 | 8.527335 | 154.999233 |
Table: Benchmarking of rowOrderStats(), apply+quantile() and rowQ() 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 | rowOrderStats | 1.568821 | 1.602634 | 1.728957 | 1.660126 | 1.802472 | 2.20168 |
| 3 | rowQ | 1.769227 | 1.788807 | 1.941000 | 1.904701 | 2.020622 | 2.48365 |
| 2 | apply+quantile | 13.182057 | 13.385584 | 14.576939 | 13.653866 | 14.562729 | 26.42372 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 3 | rowQ | 1.127743 | 1.116167 | 1.122642 | 1.147323 | 1.121028 | 1.12807 |
| 2 | apply+quantile | 8.402525 | 8.352240 | 8.431058 | 8.224597 | 8.079308 | 12.00162 |
Figure: Benchmarking of colOrderStats(), apply+quantile() and rowQ(t(X))() on double+1000x100 data as well as rowOrderStats(), apply+quantile() and rowQ() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colOrderStats() and rowOrderStats() 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 | colOrderStats | 1.539583 | 1.578974 | 1.684997 | 1.616098 | 1.686859 | 2.587708 |
| 2 | rowOrderStats | 1.568821 | 1.602634 | 1.728957 | 1.660126 | 1.802472 | 2.201680 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colOrderStats | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowOrderStats | 1.018991 | 1.014984 | 1.026089 | 1.027243 | 1.068537 | 0.8508224 |
Figure: Benchmarking of colOrderStats() and rowOrderStats() 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.0 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] rstudioapi_0.13 rappdirs_0.3.3 startup_0.15.0
[67] labeling_0.4.2 bitops_1.0-7 base64enc_0.1-3
[70] boot_1.3-28 gtable_0.3.0 DBI_1.1.1
[73] markdown_1.1 R6_2.5.1 lpSolveAPI_5.5.2.0-17.7
[76] rle_0.9.2 dplyr_1.0.7 fastmap_1.1.0
[79] bit_4.0.4 utf8_1.2.2 parallel_4.1.1
[82] Rcpp_1.0.7 vctrs_0.3.8 png_0.1-7
[85] DEoptimR_1.0-9 tidyselect_1.1.1 xfun_0.25
[88] coda_0.19-4
Total processing time was 2.09 mins.
To reproduce this report, do:
html <- matrixStats:::benchmark('colOrderStats')
Copyright Henrik Bengtsson. Last updated on 2021-08-25 22:24:27 (+0200 UTC). Powered by RSP.