This report benchmark the performance of colCummins() and rowCummins() 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 5205545 278.1 7916910 422.9 7916910 422.9
Vcells 9772989 74.6 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193013 277.4 7916910 422.9 7916910 422.9
Vcells 9731461 74.3 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.002330 | 0.0024935 | 0.0041899 | 0.002534 | 0.0026285 | 0.163776 |
| 2 | colCummins(X, rows, cols) | 0.002512 | 0.0028250 | 0.0029663 | 0.002905 | 0.0030145 | 0.005294 |
| 3 | colCummins(X[rows, cols]) | 0.003221 | 0.0035685 | 0.0037370 | 0.003672 | 0.0037845 | 0.007849 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colCummins(X, rows, cols) | 1.078112 | 1.132946 | 0.7079807 | 1.146409 | 1.146852 | 0.0323246 |
| 3 | colCummins(X[rows, cols]) | 1.382403 | 1.431121 | 0.8919152 | 1.449092 | 1.439795 | 0.0479252 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.002180 | 0.0025405 | 0.0028294 | 0.0026840 | 0.002929 | 0.005550 |
| 2 | rowCummins(X, cols, rows) | 0.002590 | 0.0029520 | 0.0049077 | 0.0031060 | 0.003385 | 0.172772 |
| 3 | rowCummins(X[cols, rows]) | 0.003161 | 0.0037645 | 0.0042124 | 0.0040355 | 0.004395 | 0.008983 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.188073 | 1.161976 | 1.734530 | 1.157228 | 1.155685 | 31.130090 |
| 3 | rowCummins(X[cols, rows]) | 1.450000 | 1.481795 | 1.488793 | 1.503540 | 1.500512 | 1.618559 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+10x10 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | colCummins_X_S | 2.33 | 2.4935 | 4.18986 | 2.534 | 2.6285 | 163.776 |
| 2 | rowCummins_X_S | 2.18 | 2.5405 | 2.82940 | 2.684 | 2.9290 | 5.550 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCummins_X_S | 0.9356223 | 1.018849 | 0.675297 | 1.059195 | 1.114324 | 0.0338877 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5191738 277.3 7916910 422.9 7916910 422.9
Vcells 9400288 71.8 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5191732 277.3 7916910 422.9 7916910 422.9
Vcells 9405371 71.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 0.014722 | 0.0150745 | 0.0154053 | 0.0152420 | 0.0156375 | 0.020775 |
| 2 | colCummins(X, rows, cols) | 0.019863 | 0.0200705 | 0.0204905 | 0.0202300 | 0.0209000 | 0.024746 |
| 3 | colCummins(X[rows, cols]) | 0.025919 | 0.0264095 | 0.0274265 | 0.0266065 | 0.0275770 | 0.051017 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.349205 | 1.331421 | 1.330091 | 1.327254 | 1.336531 | 1.191143 |
| 3 | colCummins(X[rows, cols]) | 1.760562 | 1.751932 | 1.780325 | 1.745604 | 1.763517 | 2.455692 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 0.011269 | 0.0116405 | 0.0120914 | 0.0117745 | 0.011904 | 0.021832 |
| 2 | rowCummins(X, cols, rows) | 0.020076 | 0.0203055 | 0.0210412 | 0.0204785 | 0.020640 | 0.046656 |
| 3 | rowCummins(X[cols, rows]) | 0.022696 | 0.0230005 | 0.0232872 | 0.0231585 | 0.023364 | 0.028107 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.781524 | 1.744384 | 1.740175 | 1.739225 | 1.733871 | 2.137046 |
| 3 | rowCummins(X[cols, rows]) | 2.014021 | 1.975903 | 1.925929 | 1.966835 | 1.962702 | 1.287422 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+100x100 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 11.269 | 11.6405 | 12.09144 | 11.7745 | 11.9040 | 21.832 |
| 1 | colCummins_X_S | 14.722 | 15.0745 | 15.40532 | 15.2420 | 15.6375 | 20.775 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | colCummins_X_S | 1.306416 | 1.295004 | 1.274068 | 1.294492 | 1.313634 | 0.9515848 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5192480 277.4 7916910 422.9 7916910 422.9
Vcells 9404338 71.8 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192474 277.4 7916910 422.9 7916910 422.9
Vcells 9409421 71.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.015670 | 0.0158360 | 0.0161365 | 0.0160075 | 0.0161700 | 0.022060 |
| 2 | colCummins(X, rows, cols) | 0.020882 | 0.0211305 | 0.0213286 | 0.0212610 | 0.0213995 | 0.024265 |
| 3 | colCummins(X[rows, cols]) | 0.027668 | 0.0281160 | 0.0294205 | 0.0282215 | 0.0284410 | 0.062390 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.332610 | 1.334333 | 1.321760 | 1.328190 | 1.323408 | 1.099955 |
| 3 | colCummins(X[rows, cols]) | 1.765667 | 1.775448 | 1.823221 | 1.763017 | 1.758874 | 2.828196 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.014166 | 0.0144155 | 0.0148361 | 0.0145505 | 0.0147625 | 0.029874 |
| 2 | rowCummins(X, cols, rows) | 0.023063 | 0.0233835 | 0.0240219 | 0.0236370 | 0.0238950 | 0.041511 |
| 3 | rowCummins(X[cols, rows]) | 0.027575 | 0.0281980 | 0.0289943 | 0.0283870 | 0.0287650 | 0.057518 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.628053 | 1.622108 | 1.619154 | 1.624480 | 1.618628 | 1.389536 |
| 3 | rowCummins(X[cols, rows]) | 1.946562 | 1.956089 | 1.954311 | 1.950929 | 1.948518 | 1.925353 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+1000x10 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 14.166 | 14.4155 | 14.83608 | 14.5505 | 14.7625 | 29.874 |
| 1 | colCummins_X_S | 15.670 | 15.8360 | 16.13655 | 16.0075 | 16.1700 | 22.060 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.00000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | colCummins_X_S | 1.10617 | 1.09854 | 1.087656 | 1.100134 | 1.095343 | 0.7384348 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5192685 277.4 7916910 422.9 7916910 422.9
Vcells 9405170 71.8 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192679 277.4 7916910 422.9 7916910 422.9
Vcells 9410253 71.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.012417 | 0.0129775 | 0.0133815 | 0.0130920 | 0.0132620 | 0.027088 |
| 2 | colCummins(X, rows, cols) | 0.021947 | 0.0228485 | 0.0232299 | 0.0229705 | 0.0231175 | 0.037744 |
| 3 | colCummins(X[rows, cols]) | 0.026242 | 0.0268645 | 0.0271684 | 0.0270525 | 0.0272390 | 0.031215 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.767496 | 1.760624 | 1.735977 | 1.754545 | 1.743138 | 1.393385 |
| 3 | colCummins(X[rows, cols]) | 2.113393 | 2.070083 | 2.030304 | 2.066338 | 2.053913 | 1.152355 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.010842 | 0.0112060 | 0.0114377 | 0.0113875 | 0.0115715 | 0.014782 |
| 2 | rowCummins(X, cols, rows) | 0.019605 | 0.0200830 | 0.0205675 | 0.0202240 | 0.0204085 | 0.044026 |
| 3 | rowCummins(X[cols, rows]) | 0.022824 | 0.0232155 | 0.0235122 | 0.0233875 | 0.0236185 | 0.028475 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.808246 | 1.792165 | 1.798223 | 1.775982 | 1.763687 | 2.978352 |
| 3 | rowCummins(X[cols, rows]) | 2.105147 | 2.071703 | 2.055684 | 2.053787 | 2.041092 | 1.926329 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+10x1000 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 10.842 | 11.2060 | 11.43768 | 11.3875 | 11.5715 | 14.782 |
| 1 | colCummins_X_S | 12.417 | 12.9775 | 13.38146 | 13.0920 | 13.2620 | 27.088 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 1.145268 | 1.158085 | 1.169945 | 1.149682 | 1.146092 | 1.832499 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5192896 277.4 7916910 422.9 7916910 422.9
Vcells 9427841 72.0 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5192890 277.4 7916910 422.9 7916910 422.9
Vcells 9477924 72.4 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 0.091849 | 0.097813 | 0.1084712 | 0.1021645 | 0.1173995 | 0.165053 |
| 2 | colCummins(X, rows, cols) | 0.124766 | 0.133437 | 0.1502803 | 0.1379690 | 0.1668310 | 0.283260 |
| 3 | colCummins(X[rows, cols]) | 0.169853 | 0.181177 | 0.2021601 | 0.1929750 | 0.2217820 | 0.275184 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.358382 | 1.364205 | 1.385439 | 1.350459 | 1.421054 | 1.716176 |
| 3 | colCummins(X[rows, cols]) | 1.849263 | 1.852279 | 1.863721 | 1.888866 | 1.889122 | 1.667246 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 0.065341 | 0.0697605 | 0.0782191 | 0.0747945 | 0.0866420 | 0.124541 |
| 2 | rowCummins(X, cols, rows) | 0.127408 | 0.1325905 | 0.1477554 | 0.1377975 | 0.1600035 | 0.301935 |
| 3 | rowCummins(X[cols, rows]) | 0.141966 | 0.1514080 | 0.1663348 | 0.1574730 | 0.1824585 | 0.265356 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.949894 | 1.900653 | 1.888994 | 1.842348 | 1.84672 | 2.424382 |
| 3 | rowCummins(X[cols, rows]) | 2.172694 | 2.170397 | 2.126526 | 2.105409 | 2.10589 | 2.130672 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+100x1000 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 65.341 | 69.7605 | 78.21906 | 74.7945 | 86.6420 | 124.541 |
| 1 | colCummins_X_S | 91.849 | 97.8130 | 108.47125 | 102.1645 | 117.3995 | 165.053 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 |
| 1 | colCummins_X_S | 1.405687 | 1.402126 | 1.386762 | 1.365936 | 1.354995 | 1.32529 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5193106 277.4 7916910 422.9 7916910 422.9
Vcells 9428618 72.0 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193100 277.4 7916910 422.9 7916910 422.9
Vcells 9478701 72.4 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 0.097288 | 0.1043695 | 0.1141792 | 0.1094445 | 0.1224050 | 0.167498 |
| 2 | colCummins(X, rows, cols) | 0.124448 | 0.1325890 | 0.1513855 | 0.1430235 | 0.1623875 | 0.308314 |
| 3 | colCummins(X[rows, cols]) | 0.171952 | 0.1848175 | 0.2125704 | 0.2042670 | 0.2365570 | 0.341080 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.279171 | 1.270381 | 1.325859 | 1.306813 | 1.326641 | 1.840703 |
| 3 | colCummins(X[rows, cols]) | 1.767453 | 1.770800 | 1.861725 | 1.866398 | 1.932576 | 2.036323 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 0.064526 | 0.0690160 | 0.0752052 | 0.0727410 | 0.0794415 | 0.114851 |
| 2 | rowCummins(X, cols, rows) | 0.125718 | 0.1342185 | 0.1461374 | 0.1403835 | 0.1541915 | 0.264038 |
| 3 | rowCummins(X[cols, rows]) | 0.142518 | 0.1527550 | 0.1666361 | 0.1579085 | 0.1786145 | 0.240792 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.948331 | 1.944745 | 1.943183 | 1.929909 | 1.940944 | 2.298961 |
| 3 | rowCummins(X[cols, rows]) | 2.208691 | 2.213327 | 2.215754 | 2.170832 | 2.248378 | 2.096560 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on integer+1000x100 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 64.526 | 69.0160 | 75.20515 | 72.7410 | 79.4415 | 114.851 |
| 1 | colCummins_X_S | 97.288 | 104.3695 | 114.17923 | 109.4445 | 122.4050 | 167.498 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 1.507733 | 1.512251 | 1.518237 | 1.504578 | 1.540819 | 1.458394 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5193324 277.4 7916910 422.9 7916910 422.9
Vcells 9519723 72.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193309 277.4 7916910 422.9 7916910 422.9
Vcells 9519891 72.7 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.002216 | 0.0023310 | 0.0027661 | 0.002414 | 0.0024975 | 0.032504 |
| 2 | colCummins(X, rows, cols) | 0.002441 | 0.0027025 | 0.0028328 | 0.002778 | 0.0028675 | 0.005693 |
| 3 | colCummins(X[rows, cols]) | 0.003184 | 0.0033950 | 0.0035779 | 0.003496 | 0.0036075 | 0.009843 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colCummins(X, rows, cols) | 1.101534 | 1.159374 | 1.024117 | 1.150787 | 1.148148 | 0.1751477 |
| 3 | colCummins(X[rows, cols]) | 1.436823 | 1.456457 | 1.293463 | 1.448219 | 1.444444 | 0.3028243 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.002192 | 0.0024240 | 0.0026295 | 0.0025030 | 0.0026140 | 0.009779 |
| 2 | rowCummins(X, cols, rows) | 0.002463 | 0.0026520 | 0.0030682 | 0.0027145 | 0.0028265 | 0.033493 |
| 3 | rowCummins(X[cols, rows]) | 0.003037 | 0.0034525 | 0.0035934 | 0.0035190 | 0.0036480 | 0.008236 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCummins(X, cols, rows) | 1.123631 | 1.094059 | 1.166833 | 1.084499 | 1.081293 | 3.4249923 |
| 3 | rowCummins(X[cols, rows]) | 1.385493 | 1.424299 | 1.366561 | 1.405913 | 1.395562 | 0.8422129 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+10x10 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | colCummins_X_S | 2.216 | 2.331 | 2.76614 | 2.414 | 2.4975 | 32.504 |
| 2 | rowCummins_X_S | 2.192 | 2.424 | 2.62952 | 2.503 | 2.6140 | 9.779 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.0000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCummins_X_S | 0.9891697 | 1.039897 | 0.9506099 | 1.036868 | 1.046647 | 0.3008553 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5193524 277.4 7916910 422.9 7916910 422.9
Vcells 9525683 72.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193518 277.4 7916910 422.9 7916910 422.9
Vcells 9535766 72.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 0.018548 | 0.019370 | 0.0214916 | 0.0196115 | 0.0203645 | 0.081237 |
| 2 | colCummins(X, rows, cols) | 0.027487 | 0.028266 | 0.0297218 | 0.0285560 | 0.0297905 | 0.044972 |
| 3 | colCummins(X[rows, cols]) | 0.035384 | 0.035747 | 0.0406520 | 0.0361620 | 0.0378185 | 0.145265 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colCummins(X, rows, cols) | 1.481939 | 1.459267 | 1.382948 | 1.456084 | 1.462864 | 0.5535901 |
| 3 | colCummins(X[rows, cols]) | 1.907699 | 1.845483 | 1.891528 | 1.843918 | 1.857080 | 1.7881630 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.008610 | 0.009274 | 0.0098582 | 0.0096510 | 0.0099870 | 0.024965 |
| 2 | rowCummins(X, cols, rows) | 0.016725 | 0.017617 | 0.0187327 | 0.0179720 | 0.0185155 | 0.049009 |
| 3 | rowCummins(X[cols, rows]) | 0.023891 | 0.024936 | 0.0259356 | 0.0256355 | 0.0264860 | 0.038386 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.942509 | 1.899612 | 1.900225 | 1.862190 | 1.853960 | 1.963108 |
| 3 | rowCummins(X[cols, rows]) | 2.774797 | 2.688807 | 2.630879 | 2.656253 | 2.652048 | 1.537593 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+100x100 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 8.610 | 9.274 | 9.85815 | 9.6510 | 9.9870 | 24.965 |
| 1 | colCummins_X_S | 18.548 | 19.370 | 21.49163 | 19.6115 | 20.3645 | 81.237 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 2.154239 | 2.088635 | 2.180087 | 2.032069 | 2.039101 | 3.254036 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5193723 277.4 7916910 422.9 7916910 422.9
Vcells 9527087 72.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193717 277.4 7916910 422.9 7916910 422.9
Vcells 9537170 72.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.020001 | 0.0211825 | 0.0216423 | 0.0213465 | 0.021506 | 0.051758 |
| 2 | colCummins(X, rows, cols) | 0.024540 | 0.0256575 | 0.0261151 | 0.0259225 | 0.026106 | 0.040537 |
| 3 | colCummins(X[rows, cols]) | 0.036050 | 0.0369165 | 0.0388757 | 0.0383145 | 0.038539 | 0.077128 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colCummins(X, rows, cols) | 1.226939 | 1.211259 | 1.206670 | 1.214368 | 1.213894 | 0.7832026 |
| 3 | colCummins(X[rows, cols]) | 1.802410 | 1.742783 | 1.796283 | 1.794884 | 1.792012 | 1.4901658 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.010577 | 0.0114020 | 0.0118177 | 0.0118060 | 0.0120895 | 0.014964 |
| 2 | rowCummins(X, cols, rows) | 0.019738 | 0.0208580 | 0.0214364 | 0.0217220 | 0.0220050 | 0.024602 |
| 3 | rowCummins(X[cols, rows]) | 0.028957 | 0.0303755 | 0.0324387 | 0.0316365 | 0.0320795 | 0.067983 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.866125 | 1.829328 | 1.813913 | 1.839912 | 1.820175 | 1.644079 |
| 3 | rowCummins(X[cols, rows]) | 2.737733 | 2.664050 | 2.744916 | 2.679697 | 2.653501 | 4.543103 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+1000x10 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 10.577 | 11.4020 | 11.81774 | 11.8060 | 12.0895 | 14.964 |
| 1 | colCummins_X_S | 20.001 | 21.1825 | 21.64233 | 21.3465 | 21.5060 | 51.758 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 1.89099 | 1.857788 | 1.831343 | 1.808106 | 1.778899 | 3.458835 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5193928 277.4 7916910 422.9 7916910 422.9
Vcells 9527223 72.7 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5193922 277.4 7916910 422.9 7916910 422.9
Vcells 9537306 72.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.011280 | 0.0118475 | 0.0123158 | 0.0120555 | 0.0123515 | 0.031398 |
| 3 | colCummins(X[rows, cols]) | 0.030099 | 0.0313330 | 0.0320822 | 0.0319560 | 0.0322320 | 0.058855 |
| 2 | colCummins(X, rows, cols) | 0.038250 | 0.0401205 | 0.0420835 | 0.0413480 | 0.0430510 | 0.068609 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | colCummins(X[rows, cols]) | 2.668351 | 2.644693 | 2.604954 | 2.650740 | 2.609562 | 1.874483 |
| 2 | colCummins(X, rows, cols) | 3.390957 | 3.386411 | 3.417025 | 3.429804 | 3.485488 | 2.185139 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | rowCummins_X_S | 0.009841 | 0.0103465 | 0.0155926 | 0.0179385 | 0.0190945 | 0.022135 |
| 2 | rowCummins(X, cols, rows) | 0.019463 | 0.0268685 | 0.0312358 | 0.0334295 | 0.0348230 | 0.057469 |
| 3 | rowCummins(X[cols, rows]) | 0.027592 | 0.0281150 | 0.0398897 | 0.0444620 | 0.0459760 | 0.096757 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 1.977746 | 2.596868 | 2.003247 | 1.863562 | 1.823719 | 2.596296 |
| 3 | rowCummins(X[cols, rows]) | 2.803780 | 2.717344 | 2.558243 | 2.478580 | 2.407814 | 4.371222 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+10x1000 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 11.280 | 11.8475 | 12.31584 | 12.0555 | 12.3515 | 31.398 |
| 2 | rowCummins_X_S | 9.841 | 10.3465 | 15.59261 | 17.9385 | 19.0945 | 22.135 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCummins_X_S | 0.8724291 | 0.8733066 | 1.266061 | 1.487993 | 1.545926 | 0.7049812 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5194139 277.4 7916910 422.9 7916910 422.9
Vcells 9572677 73.1 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194133 277.4 7916910 422.9 7916910 422.9
Vcells 9672760 73.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins_X_S | 0.123995 | 0.1489515 | 0.1902407 | 0.1716795 | 0.2377835 | 0.274697 |
| 2 | colCummins(X, rows, cols) | 0.206843 | 0.2215395 | 0.2682690 | 0.2676780 | 0.3009670 | 0.383653 |
| 3 | colCummins(X[rows, cols]) | 0.249138 | 0.2781345 | 0.3626980 | 0.3239760 | 0.4529690 | 0.547241 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colCummins(X, rows, cols) | 1.668156 | 1.487326 | 1.410155 | 1.559173 | 1.265719 | 1.396641 |
| 3 | colCummins(X[rows, cols]) | 2.009258 | 1.867282 | 1.906522 | 1.887098 | 1.904964 | 1.992162 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 0.053265 | 0.0568025 | 0.0655034 | 0.0628090 | 0.0690690 | 0.116550 |
| 2 | rowCummins(X, cols, rows) | 0.117202 | 0.1187275 | 0.1311534 | 0.1257885 | 0.1389795 | 0.255642 |
| 3 | rowCummins(X[cols, rows]) | 0.173150 | 0.1790470 | 0.2006694 | 0.1961750 | 0.2154230 | 0.351481 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 2.200357 | 2.090181 | 2.002237 | 2.002715 | 2.012183 | 2.193411 |
| 3 | rowCummins(X[cols, rows]) | 3.250727 | 3.152097 | 3.063494 | 3.123358 | 3.118953 | 3.015710 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+100x1000 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 53.265 | 56.8025 | 65.50343 | 62.8090 | 69.0690 | 116.550 |
| 1 | colCummins_X_S | 123.995 | 148.9515 | 190.24072 | 171.6795 | 237.7835 | 274.697 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 2.327889 | 2.62227 | 2.904286 | 2.733358 | 3.442695 | 2.356903 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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 5194349 277.5 7916910 422.9 7916910 422.9
Vcells 9572818 73.1 33191153 253.3 53339345 407.0
> colStats <- microbenchmark(colCummins_X_S = colCummins(X_S), `colCummins(X, rows, cols)` = colCummins(X,
+ rows = rows, cols = cols), `colCummins(X[rows, cols])` = colCummins(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 5194343 277.5 7916910 422.9 7916910 422.9
Vcells 9672901 73.8 33191153 253.3 53339345 407.0
> rowStats <- microbenchmark(rowCummins_X_S = rowCummins(X_S), `rowCummins(X, cols, rows)` = rowCummins(X,
+ rows = cols, cols = rows), `rowCummins(X[cols, rows])` = rowCummins(X[cols, rows]), unit = "ms")
Table: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(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 | colCummins(X, rows, cols) | 0.170143 | 0.1879635 | 0.2392096 | 0.2400995 | 0.2819365 | 0.323949 |
| 1 | colCummins_X_S | 0.145330 | 0.1700135 | 0.2202261 | 0.2402445 | 0.2609510 | 0.313648 |
| 3 | colCummins(X[rows, cols]) | 0.261099 | 0.3078045 | 0.3916748 | 0.3450270 | 0.4830445 | 0.541359 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colCummins(X, rows, cols) | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.0000000 | 1.0000000 |
| 1 | colCummins_X_S | 0.8541639 | 0.9045027 | 0.9206408 | 1.000604 | 0.9255666 | 0.9682018 |
| 3 | colCummins(X[rows, cols]) | 1.5345856 | 1.6375759 | 1.6373704 | 1.437017 | 1.7133096 | 1.6711242 |
Table: Benchmarking of rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(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 | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 0.053698 | 0.0563250 | 0.0643461 | 0.0603185 | 0.0690515 | 0.106838 |
| 2 | rowCummins(X, cols, rows) | 0.118892 | 0.1234485 | 0.1388333 | 0.1360840 | 0.1488855 | 0.308372 |
| 3 | rowCummins(X[cols, rows]) | 0.174977 | 0.1816975 | 0.2041870 | 0.1964685 | 0.2244635 | 0.354954 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCummins(X, cols, rows) | 2.214086 | 2.191718 | 2.157603 | 2.256091 | 2.156152 | 2.886351 |
| 3 | rowCummins(X[cols, rows]) | 3.258538 | 3.225877 | 3.173263 | 3.257185 | 3.250668 | 3.322357 |
Figure: Benchmarking of colCummins_X_S(), colCummins(X, rows, cols)() and colCummins(X[rows, cols])() on double+1000x100 data as well as rowCummins_X_S(), rowCummins(X, cols, rows)() and rowCummins(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCummins_X_S() and rowCummins_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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 53.698 | 56.3250 | 64.34607 | 60.3185 | 69.0515 | 106.838 |
| 1 | colCummins_X_S | 145.330 | 170.0135 | 220.22613 | 240.2445 | 260.9510 | 313.648 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCummins_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCummins_X_S | 2.706432 | 3.018438 | 3.422527 | 3.982932 | 3.779078 | 2.935735 |
Figure: Benchmarking of colCummins_X_S() and rowCummins_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.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 23.5 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colRowCummins_subset')
Copyright Dongcan Jiang. Last updated on 2021-08-25 22:13:04 (+0200 UTC). Powered by RSP.