colRowCumprods_subset - HenrikBengtsson/matrixStats GitHub Wiki
matrixStats: Benchmark report
This report benchmark the performance of colCumprods() and rowCumprods() 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, range = c(-1, 1))> 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 3098331 165.5    5709258 305.0  5709258 305.0
Vcells 5726677  43.7   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097491 165.5    5709258 305.0  5709258 305.0
Vcells 5724613  43.7   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.000943 | 0.0011080 | 0.0020959 | 0.0011540 | 0.0012145 | 0.092382 | 
| 2 | colCumprods(X, rows, cols) | 0.001046 | 0.0012835 | 0.0013778 | 0.0013305 | 0.0014135 | 0.002981 | 
| 3 | colCumprods(X[rows, cols]) | 0.001413 | 0.0017795 | 0.0019528 | 0.0018725 | 0.0019895 | 0.007442 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | colCumprods(X, rows, cols) | 1.109226 | 1.158394 | 0.6574120 | 1.152946 | 1.163853 | 0.0322682 | 
| 3 | colCumprods(X[rows, cols]) | 1.498409 | 1.606047 | 0.9317181 | 1.622617 | 1.638123 | 0.0805568 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.000909 | 0.0010860 | 0.0012022 | 0.001158 | 0.0012235 | 0.002876 | 
| 2 | rowCumprods(X, cols, rows) | 0.001094 | 0.0012835 | 0.0020782 | 0.001352 | 0.0014500 | 0.070793 | 
| 3 | rowCumprods(X[cols, rows]) | 0.001432 | 0.0017940 | 0.0019203 | 0.001887 | 0.0019925 | 0.003564 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.203520 | 1.181860 | 1.728652 | 1.167530 | 1.185125 | 24.615090 | 
| 3 | rowCumprods(X[cols, rows]) | 1.575357 | 1.651934 | 1.597270 | 1.629534 | 1.628525 | 1.239221 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | colCumprods_X_S | 943 | 1108 | 2095.87 | 1154 | 1214.5 | 92382 | 
| 2 | rowCumprods_X_S | 909 | 1086 | 1202.22 | 1158 | 1223.5 | 2876 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.00000 | 1.0000000 | 
| 2 | rowCumprods_X_S | 0.9639449 | 0.9801444 | 0.5736138 | 1.003466 | 1.00741 | 0.0311316 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3096075 165.4    5709258 305.0  5709258 305.0
Vcells 5393454  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3096069 165.4    5709258 305.0  5709258 305.0
Vcells 5398537  41.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.008881 | 0.0090770 | 0.0095852 | 0.0091425 | 0.0092520 | 0.023437 | 
| 2 | colCumprods(X, rows, cols) | 0.010862 | 0.0110650 | 0.0115328 | 0.0111875 | 0.0113035 | 0.020208 | 
| 3 | colCumprods(X[rows, cols]) | 0.016298 | 0.0166755 | 0.0175983 | 0.0168260 | 0.0170140 | 0.059456 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | colCumprods(X, rows, cols) | 1.223061 | 1.219015 | 1.203186 | 1.223681 | 1.221736 | 0.8622264 | 
| 3 | colCumprods(X[rows, cols]) | 1.835154 | 1.837116 | 1.835983 | 1.840416 | 1.838954 | 2.5368435 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.009459 | 0.009681 | 0.0099152 | 0.0097745 | 0.0098945 | 0.013821 | 
| 2 | rowCumprods(X, cols, rows) | 0.012302 | 0.012507 | 0.0126952 | 0.0126680 | 0.0127525 | 0.015253 | 
| 3 | rowCumprods(X[cols, rows]) | 0.017043 | 0.017234 | 0.0178813 | 0.0173760 | 0.0174960 | 0.058964 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.300560 | 1.291912 | 1.280374 | 1.296025 | 1.288847 | 1.103610 | 
| 3 | rowCumprods(X[cols, rows]) | 1.801776 | 1.780188 | 1.803411 | 1.777687 | 1.768255 | 4.266261 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 8.881 | 9.077 | 9.58524 | 9.1425 | 9.2520 | 23.437 | 
| 2 | rowCumprods_X_S | 9.459 | 9.681 | 9.91525 | 9.7745 | 9.8945 | 13.821 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumprods_X_S | 1.065083 | 1.066542 | 1.034429 | 1.069128 | 1.069444 | 0.5897086 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3096830 165.4    5709258 305.0  5709258 305.0
Vcells 5397527  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3096821 165.4    5709258 305.0  5709258 305.0
Vcells 5402605  41.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.008879 | 0.0090310 | 0.0091919 | 0.009131 | 0.0092100 | 0.012137 | 
| 2 | colCumprods(X, rows, cols) | 0.010996 | 0.0113385 | 0.0118672 | 0.011466 | 0.0115725 | 0.044242 | 
| 3 | colCumprods(X[rows, cols]) | 0.016058 | 0.0164085 | 0.0166676 | 0.016545 | 0.0166875 | 0.020173 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.238428 | 1.255509 | 1.291053 | 1.255722 | 1.256515 | 3.645217 | 
| 3 | colCumprods(X[rows, cols]) | 1.808537 | 1.816908 | 1.813298 | 1.811959 | 1.811889 | 1.662108 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.010637 | 0.010867 | 0.0112235 | 0.0109605 | 0.0110425 | 0.027148 | 
| 2 | rowCumprods(X, cols, rows) | 0.014605 | 0.014893 | 0.0152844 | 0.0150045 | 0.0152365 | 0.029431 | 
| 3 | rowCumprods(X[cols, rows]) | 0.019079 | 0.019348 | 0.0196167 | 0.0195270 | 0.0196945 | 0.021856 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.373037 | 1.370479 | 1.361814 | 1.368961 | 1.379805 | 1.0840946 | 
| 3 | rowCumprods(X[cols, rows]) | 1.793645 | 1.780436 | 1.747820 | 1.781579 | 1.783518 | 0.8050685 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 8.879 | 9.031 | 9.19186 | 9.1310 | 9.2100 | 12.137 | 
| 2 | rowCumprods_X_S | 10.637 | 10.867 | 11.22354 | 10.9605 | 11.0425 | 27.148 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.0000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods_X_S | 1.197995 | 1.2033 | 1.22103 | 1.200361 | 1.198969 | 2.236797 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3097033 165.4    5709258 305.0  5709258 305.0
Vcells 5398373  41.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097027 165.4    5709258 305.0  5709258 305.0
Vcells 5403456  41.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.009560 | 0.009733 | 0.0099103 | 0.0098225 | 0.0099185 | 0.013529 | 
| 2 | colCumprods(X, rows, cols) | 0.013040 | 0.013394 | 0.0140594 | 0.0135155 | 0.0136755 | 0.058081 | 
| 3 | colCumprods(X[rows, cols]) | 0.018024 | 0.018304 | 0.0187216 | 0.0184405 | 0.0186270 | 0.029221 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.364017 | 1.376143 | 1.418659 | 1.375973 | 1.378787 | 4.293074 | 
| 3 | colCumprods(X[rows, cols]) | 1.885356 | 1.880612 | 1.889099 | 1.877373 | 1.878006 | 2.159879 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.008677 | 0.0091420 | 0.0094411 | 0.0092960 | 0.0094475 | 0.025584 | 
| 2 | rowCumprods(X, cols, rows) | 0.011571 | 0.0119865 | 0.0122191 | 0.0121580 | 0.0124000 | 0.014504 | 
| 3 | rowCumprods(X[cols, rows]) | 0.015892 | 0.0165625 | 0.0170378 | 0.0167145 | 0.0169670 | 0.031134 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.333525 | 1.311146 | 1.294241 | 1.307874 | 1.312517 | 0.5669168 | 
| 3 | rowCumprods(X[cols, rows]) | 1.831509 | 1.811693 | 1.804645 | 1.798031 | 1.795925 | 1.2169325 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | rowCumprods_X_S | 8.677 | 9.142 | 9.44110 | 9.2960 | 9.4475 | 25.584 | 
| 1 | colCumprods_X_S | 9.560 | 9.733 | 9.91032 | 9.8225 | 9.9185 | 13.529 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.0000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCumprods_X_S | 1.101763 | 1.064647 | 1.0497 | 1.056637 | 1.049854 | 0.5288071 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3097232 165.5    5709258 305.0  5709258 305.0
Vcells 5421036  41.4   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097226 165.5    5709258 305.0  5709258 305.0
Vcells 5471119  41.8   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.078206 | 0.0789305 | 0.0820328 | 0.0826030 | 0.0831015 | 0.097527 | 
| 2 | colCumprods(X, rows, cols) | 0.101258 | 0.1021430 | 0.1074809 | 0.1070615 | 0.1098300 | 0.193482 | 
| 3 | colCumprods(X[rows, cols]) | 0.149782 | 0.1511940 | 0.1580306 | 0.1581345 | 0.1620910 | 0.213764 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.294760 | 1.294088 | 1.310219 | 1.296097 | 1.321637 | 1.983881 | 
| 3 | colCumprods(X[rows, cols]) | 1.915224 | 1.915533 | 1.926433 | 1.914392 | 1.950518 | 2.191844 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.081034 | 0.0832935 | 0.0869774 | 0.0859585 | 0.0883515 | 0.118210 | 
| 2 | rowCumprods(X, cols, rows) | 0.108651 | 0.1093705 | 0.1153381 | 0.1153560 | 0.1181200 | 0.136955 | 
| 3 | rowCumprods(X[cols, rows]) | 0.144255 | 0.1487890 | 0.1540784 | 0.1526950 | 0.1568425 | 0.206683 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.340808 | 1.313074 | 1.326070 | 1.341996 | 1.336933 | 1.158574 | 
| 3 | rowCumprods(X[cols, rows]) | 1.780179 | 1.786322 | 1.771476 | 1.776380 | 1.775210 | 1.748439 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 78.206 | 78.9305 | 82.03276 | 82.6030 | 83.1015 | 97.527 | 
| 2 | rowCumprods_X_S | 81.034 | 83.2935 | 86.97738 | 85.9585 | 88.3515 | 118.210 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods_X_S | 1.036161 | 1.055276 | 1.060276 | 1.040622 | 1.063176 | 1.212075 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3097448 165.5    5709258 305.0  5709258 305.0
Vcells 5421823  41.4   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097442 165.5    5709258 305.0  5709258 305.0
Vcells 5471906  41.8   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.077828 | 0.0785115 | 0.0822036 | 0.0822755 | 0.0844955 | 0.102549 | 
| 2 | colCumprods(X, rows, cols) | 0.096794 | 0.0981950 | 0.1021855 | 0.1029425 | 0.1037880 | 0.119113 | 
| 3 | colCumprods(X[rows, cols]) | 0.141179 | 0.1425215 | 0.1490594 | 0.1489910 | 0.1529095 | 0.225731 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.243691 | 1.250709 | 1.243078 | 1.251193 | 1.228326 | 1.161523 | 
| 3 | colCumprods(X[rows, cols]) | 1.813987 | 1.815295 | 1.813295 | 1.810879 | 1.809676 | 2.201201 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.082362 | 0.085055 | 0.0895342 | 0.089577 | 0.0922885 | 0.106258 | 
| 2 | rowCumprods(X, cols, rows) | 0.113112 | 0.119487 | 0.1224358 | 0.123335 | 0.1266285 | 0.131610 | 
| 3 | rowCumprods(X[cols, rows]) | 0.153813 | 0.158808 | 0.1666995 | 0.166861 | 0.1716135 | 0.251910 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.373352 | 1.404820 | 1.367474 | 1.376860 | 1.372094 | 1.238589 | 
| 3 | rowCumprods(X[cols, rows]) | 1.867524 | 1.867121 | 1.861852 | 1.862766 | 1.859533 | 2.370739 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on integer+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on integer+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 77.828 | 78.5115 | 82.20359 | 82.2755 | 84.4955 | 102.549 | 
| 2 | rowCumprods_X_S | 82.362 | 85.0550 | 89.53424 | 89.5770 | 92.2885 | 106.258 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 2 | rowCumprods_X_S | 1.058257 | 1.083344 | 1.089177 | 1.088745 | 1.09223 | 1.036168 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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, range = c(-1, 1))> 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 3097666 165.5    5709258 305.0  5709258 305.0
Vcells 5512933  42.1   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097651 165.5    5709258 305.0  5709258 305.0
Vcells 5513101  42.1   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.000952 | 0.0011035 | 0.0013174 | 0.001158 | 0.0012605 | 0.012576 | 
| 2 | colCumprods(X, rows, cols) | 0.001028 | 0.0012710 | 0.0013775 | 0.001330 | 0.0014160 | 0.003704 | 
| 3 | colCumprods(X[rows, cols]) | 0.001731 | 0.0018940 | 0.0020436 | 0.001958 | 0.0020770 | 0.006391 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | colCumprods(X, rows, cols) | 1.079832 | 1.151790 | 1.045675 | 1.148532 | 1.123364 | 0.2945293 | 
| 3 | colCumprods(X[rows, cols]) | 1.818277 | 1.716357 | 1.551327 | 1.690846 | 1.647759 | 0.5081902 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.000972 | 0.001156 | 0.0012820 | 0.0012175 | 0.0013085 | 0.003384 | 
| 2 | rowCumprods(X, cols, rows) | 0.001229 | 0.001334 | 0.0017182 | 0.0013735 | 0.0014920 | 0.030760 | 
| 3 | rowCumprods(X[cols, rows]) | 0.001374 | 0.001883 | 0.0020346 | 0.0019745 | 0.0020985 | 0.005897 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.264403 | 1.153979 | 1.340268 | 1.128131 | 1.140237 | 9.089835 | 
| 3 | rowCumprods(X[cols, rows]) | 1.413580 | 1.628893 | 1.587003 | 1.621766 | 1.603745 | 1.742612 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | colCumprods_X_S | 952 | 1103.5 | 1317.35 | 1158.0 | 1260.5 | 12576 | 
| 2 | rowCumprods_X_S | 972 | 1156.0 | 1282.02 | 1217.5 | 1308.5 | 3384 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 2 | rowCumprods_X_S | 1.021008 | 1.047576 | 0.973181 | 1.051382 | 1.03808 | 0.269084 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3097868 165.5    5709258 305.0  5709258 305.0
Vcells 5518895  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3097862 165.5    5709258 305.0  5709258 305.0
Vcells 5528978  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.004857 | 0.0053875 | 0.0061113 | 0.0061820 | 0.0065645 | 0.011150 | 
| 2 | colCumprods(X, rows, cols) | 0.006832 | 0.0073620 | 0.0078238 | 0.0076895 | 0.0079470 | 0.018924 | 
| 3 | colCumprods(X[rows, cols]) | 0.020587 | 0.0210105 | 0.0225388 | 0.0218470 | 0.0222960 | 0.064249 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.406630 | 1.366497 | 1.280210 | 1.243853 | 1.210603 | 1.697220 | 
| 3 | colCumprods(X[rows, cols]) | 4.238625 | 3.899861 | 3.688028 | 3.533970 | 3.396451 | 5.762242 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.004630 | 0.005291 | 0.0068845 | 0.006517 | 0.0068605 | 0.070451 | 
| 2 | rowCumprods(X, cols, rows) | 0.006778 | 0.007413 | 0.0077374 | 0.007658 | 0.0078810 | 0.012150 | 
| 3 | rowCumprods(X[cols, rows]) | 0.012182 | 0.012745 | 0.0142953 | 0.014028 | 0.0146400 | 0.058371 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.463931 | 1.401058 | 1.123901 | 1.175081 | 1.148750 | 0.1724603 | 
| 3 | rowCumprods(X[cols, rows]) | 2.631102 | 2.408807 | 2.076465 | 2.152524 | 2.133955 | 0.8285333 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 4.857 | 5.3875 | 6.11134 | 6.182 | 6.5645 | 11.150 | 
| 2 | rowCumprods_X_S | 4.630 | 5.2910 | 6.88446 | 6.517 | 6.8605 | 70.451 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.0000000 | 1.0000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods_X_S | 0.9532633 | 0.9820882 | 1.126506 | 1.05419 | 1.045091 | 6.318475 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3098077 165.5    5709258 305.0  5709258 305.0
Vcells 5520315  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098071 165.5    5709258 305.0  5709258 305.0
Vcells 5530398  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.006214 | 0.0066255 | 0.0071267 | 0.0068170 | 0.0070270 | 0.030411 | 
| 2 | colCumprods(X, rows, cols) | 0.007433 | 0.0079490 | 0.0085254 | 0.0081575 | 0.0083305 | 0.037608 | 
| 3 | colCumprods(X[rows, cols]) | 0.021876 | 0.0223045 | 0.0230152 | 0.0226300 | 0.0228200 | 0.054050 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.196170 | 1.199758 | 1.196262 | 1.196641 | 1.185499 | 1.236658 | 
| 3 | colCumprods(X[rows, cols]) | 3.520438 | 3.366463 | 3.229440 | 3.319642 | 3.247474 | 1.777317 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.005565 | 0.0061255 | 0.0070997 | 0.0067885 | 0.0072950 | 0.037785 | 
| 2 | rowCumprods(X, cols, rows) | 0.009015 | 0.0096460 | 0.0101746 | 0.0099080 | 0.0101445 | 0.029923 | 
| 3 | rowCumprods(X[cols, rows]) | 0.014459 | 0.0152740 | 0.0165178 | 0.0161425 | 0.0168050 | 0.047537 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.619946 | 1.574729 | 1.433108 | 1.459527 | 1.390610 | 0.791928 | 
| 3 | rowCumprods(X[cols, rows]) | 2.598203 | 2.493511 | 2.326552 | 2.377918 | 2.303633 | 1.258092 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x10 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x10 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | rowCumprods_X_S | 5.565 | 6.1255 | 7.09970 | 6.7885 | 7.295 | 37.785 | 
| 1 | colCumprods_X_S | 6.214 | 6.6255 | 7.12669 | 6.8170 | 7.027 | 30.411 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.0000000 | 
| 1 | colCumprods_X_S | 1.116622 | 1.081626 | 1.003802 | 1.004198 | 0.9632625 | 0.8048432 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3098283 165.5    5709258 305.0  5709258 305.0
Vcells 5520452  42.2   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098277 165.5    5709258 305.0  5709258 305.0
Vcells 5530535  42.2   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.004489 | 0.0051910 | 0.0061553 | 0.0063625 | 0.0066715 | 0.011010 | 
| 2 | colCumprods(X, rows, cols) | 0.008567 | 0.0091035 | 0.0101483 | 0.0093015 | 0.0095055 | 0.053090 | 
| 3 | colCumprods(X[rows, cols]) | 0.013335 | 0.0145385 | 0.0158261 | 0.0157695 | 0.0163460 | 0.022723 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.908443 | 1.753708 | 1.64870 | 1.461925 | 1.424792 | 4.821980 | 
| 3 | colCumprods(X[rows, cols]) | 2.970595 | 2.800713 | 2.57112 | 2.478507 | 2.450124 | 2.063851 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.004419 | 0.0049675 | 0.0063573 | 0.0060880 | 0.0064325 | 0.038899 | 
| 2 | rowCumprods(X, cols, rows) | 0.006921 | 0.0073630 | 0.0079872 | 0.0075575 | 0.0078140 | 0.038926 | 
| 3 | rowCumprods(X[cols, rows]) | 0.011858 | 0.0129355 | 0.0141958 | 0.0143140 | 0.0146425 | 0.029884 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.566191 | 1.482234 | 1.256380 | 1.241377 | 1.214769 | 1.000694 | 
| 3 | rowCumprods(X[cols, rows]) | 2.683413 | 2.604026 | 2.232982 | 2.351183 | 2.276331 | 0.768246 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+10x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+10x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 4.419 | 4.9675 | 6.35733 | 6.0880 | 6.4325 | 38.899 | 
| 1 | colCumprods_X_S | 4.489 | 5.1910 | 6.15533 | 6.3625 | 6.6715 | 11.010 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCumprods_X_S | 1.015841 | 1.044992 | 0.9682257 | 1.045089 | 1.037155 | 0.2830407 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3098482 165.5    5709258 305.0  5709258 305.0
Vcells 5565906  42.5   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098476 165.5    5709258 305.0  5709258 305.0
Vcells 5665989  43.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | colCumprods_X_S | 0.040681 | 0.0427140 | 0.0850630 | 0.0489350 | 0.1441715 | 0.184042 | 
| 2 | colCumprods(X, rows, cols) | 0.065642 | 0.0667155 | 0.1099405 | 0.0777160 | 0.1707740 | 0.678898 | 
| 3 | colCumprods(X[rows, cols]) | 0.191395 | 0.1951510 | 0.3153127 | 0.2191255 | 0.3987120 | 4.575217 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.613579 | 1.561912 | 1.292460 | 1.588148 | 1.18452 | 3.688821 | 
| 3 | colCumprods(X[rows, cols]) | 4.704776 | 4.568783 | 3.706815 | 4.477889 | 2.76554 | 24.859635 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.033487 | 0.0350245 | 0.0388241 | 0.036631 | 0.0388215 | 0.084922 | 
| 2 | rowCumprods(X, cols, rows) | 0.057095 | 0.0576420 | 0.0624490 | 0.058124 | 0.0622650 | 0.143848 | 
| 3 | rowCumprods(X[cols, rows]) | 0.108312 | 0.1105250 | 0.1695680 | 0.111465 | 0.1151470 | 5.556977 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.704990 | 1.645762 | 1.608510 | 1.586744 | 1.603879 | 1.693884 | 
| 3 | rowCumprods(X[cols, rows]) | 3.234449 | 3.155648 | 4.367598 | 3.042915 | 2.966063 | 65.436247 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+100x1000 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+100x1000 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | rowCumprods_X_S | 33.487 | 35.0245 | 38.82409 | 36.631 | 38.8215 | 84.922 | 
| 1 | colCumprods_X_S | 40.681 | 42.7140 | 85.06298 | 48.935 | 144.1715 | 184.042 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 
| 1 | colCumprods_X_S | 1.21483 | 1.219546 | 2.190984 | 1.33589 | 3.713703 | 2.167189 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_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 3098698 165.5    5709258 305.0  5709258 305.0
Vcells 5566053  42.5   22267496 169.9 56666022 432.4
> colStats <- microbenchmark(colCumprods_X_S = colCumprods(X_S), `colCumprods(X, rows, cols)` = colCumprods(X, 
+     rows = rows, cols = cols), `colCumprods(X[rows, cols])` = colCumprods(X[rows, cols]), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> gc()
          used  (Mb) gc trigger  (Mb) max used  (Mb)
Ncells 3098692 165.5    5709258 305.0  5709258 305.0
Vcells 5666136  43.3   22267496 169.9 56666022 432.4
> rowStats <- microbenchmark(rowCumprods_X_S = rowCumprods(X_S), `rowCumprods(X, cols, rows)` = rowCumprods(X, 
+     rows = cols, cols = rows), `rowCumprods(X[cols, rows])` = rowCumprods(X[cols, rows]), unit = "ms")Table: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(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 | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 0.065734 | 0.0665525 | 0.0691468 | 0.0670175 | 0.0709305 | 0.088035 | 
| 2 | colCumprods(X, rows, cols) | 0.074532 | 0.0750390 | 0.1148334 | 0.0752925 | 0.0759400 | 3.874134 | 
| 3 | colCumprods(X[rows, cols]) | 0.134556 | 0.1359320 | 0.1425392 | 0.1368215 | 0.1444270 | 0.278853 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCumprods_X_S | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 
| 2 | colCumprods(X, rows, cols) | 1.133843 | 1.127516 | 1.66072 | 1.123475 | 1.070626 | 44.006747 | 
| 3 | colCumprods(X[rows, cols]) | 2.046977 | 2.042478 | 2.06140 | 2.041579 | 2.036176 | 3.167524 | 
Table: Benchmarking of rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(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 | rowCumprods_X_S | 0.052424 | 0.053742 | 0.0943576 | 0.0545095 | 0.0570295 | 3.809591 | 
| 2 | rowCumprods(X, cols, rows) | 0.079854 | 0.080920 | 0.0835950 | 0.0813700 | 0.0846615 | 0.162819 | 
| 3 | rowCumprods(X[cols, rows]) | 0.131606 | 0.133867 | 0.1397911 | 0.1351145 | 0.1398330 | 0.262065 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCumprods_X_S | 1.000000 | 1.000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 2 | rowCumprods(X, cols, rows) | 1.523234 | 1.505713 | 0.8859385 | 1.492767 | 1.484521 | 0.0427392 | 
| 3 | rowCumprods(X[cols, rows]) | 2.510415 | 2.490920 | 1.4815027 | 2.478733 | 2.451942 | 0.0687908 | 
Figure: Benchmarking of colCumprods_X_S(), colCumprods(X, rows, cols)() and colCumprods(X[rows, cols])() on double+1000x100 data as well as rowCumprods_X_S(), rowCumprods(X, cols, rows)() and rowCumprods(X[cols, rows])() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

 Table: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x100 data (original and transposed).  The top panel shows times in milliseconds and the bottom panel shows relative times.
Table: Benchmarking of colCumprods_X_S() and rowCumprods_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 | rowCumprods_X_S | 52.424 | 53.7420 | 94.35762 | 54.5095 | 57.0295 | 3809.591 | 
| 1 | colCumprods_X_S | 65.734 | 66.5525 | 69.14678 | 67.0175 | 70.9305 | 88.035 | 
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCumprods_X_S | 1.000000 | 1.00000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 | 
| 1 | colCumprods_X_S | 1.253891 | 1.23837 | 0.7328161 | 1.229465 | 1.243751 | 0.0231088 | 
Figure: Benchmarking of colCumprods_X_S() and rowCumprods_X_S() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

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