matrixStats.benchmarks


colProds() and rowProds() benchmarks on subsetted computation

This report benchmark the performance of colProds() and rowProds() on subsetted computation.

Data

> 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 = "double")

Results

10x10 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.013104 0.0134945 0.0140341 0.0137760 0.0140640 0.030411
3 colProds(X, rows, cols) w/ direct 0.014451 0.0149205 0.0153308 0.0151895 0.0154840 0.022014
5 colProds(X[rows, cols]) w/ direct 0.014543 0.0150400 0.0179708 0.0152405 0.0155285 0.256450
2 colProds_X_S w/ expSumLog 0.020571 0.0210500 0.0216345 0.0213085 0.0217850 0.036162
4 colProds(X, rows, cols) w/ expSumLog 0.021690 0.0224525 0.0228605 0.0226650 0.0229620 0.034539
6 colProds(X[rows, cols]) w/ expSumLog 0.022037 0.0225500 0.0239190 0.0227200 0.0231395 0.077964
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
3 colProds(X, rows, cols) w/ direct 1.102793 1.105673 1.092397 1.102606 1.100967 0.7238828
5 colProds(X[rows, cols]) w/ direct 1.109814 1.114528 1.280507 1.106308 1.104131 8.4328039
2 colProds_X_S w/ expSumLog 1.569826 1.559895 1.541564 1.546784 1.548990 1.1891092
4 colProds(X, rows, cols) w/ expSumLog 1.655220 1.663826 1.628918 1.645253 1.632679 1.1357404
6 colProds(X[rows, cols]) w/ expSumLog 1.681700 1.671051 1.704344 1.649245 1.645300 2.5636776

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.013297 0.0136985 0.0141482 0.0140395 0.0144565 0.016972
3 rowProds(X, cols, rows) w/ direct 0.014541 0.0152750 0.0159843 0.0155035 0.0160040 0.030366
5 rowProds(X[cols, rows]) w/ direct 0.014723 0.0152890 0.0157780 0.0155515 0.0158600 0.025774
2 rowProds_X_S w/ expSumLog 0.020789 0.0214310 0.0220587 0.0217115 0.0221525 0.046059
6 rowProds(X[cols, rows]) w/ expSumLog 0.022018 0.0227455 0.0234463 0.0230640 0.0235200 0.038802
4 rowProds(X, cols, rows) w/ expSumLog 0.022227 0.0227205 0.0259758 0.0230840 0.0235160 0.290159
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowProds(X, cols, rows) w/ direct 1.093555 1.115086 1.129781 1.104277 1.107045 1.789182
5 rowProds(X[cols, rows]) w/ direct 1.107242 1.116108 1.115198 1.107696 1.097084 1.518619
2 rowProds_X_S w/ expSumLog 1.563435 1.564478 1.559125 1.546458 1.532356 2.713823
6 rowProds(X[cols, rows]) w/ expSumLog 1.655862 1.660437 1.657196 1.642794 1.626950 2.286236
4 rowProds(X, cols, rows) w/ expSumLog 1.671580 1.658612 1.835986 1.644218 1.626673 17.096335

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x10 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 13.104 13.4945 14.03414 13.7760 14.0640 30.411
2 rowProds_X_S w/ direct 13.297 13.6985 14.14816 14.0395 14.4565 16.972
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowProds_X_S w/ direct 1.014728 1.015117 1.008125 1.019127 1.027908 0.5580875

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x100 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.073709 0.0749175 0.0905664 0.0809315 0.0977605 0.200449
3 colProds(X, rows, cols) w/ direct 0.083946 0.0864785 0.1019647 0.0934380 0.1096635 0.172019
5 colProds(X[rows, cols]) w/ direct 0.084412 0.0861960 0.1026389 0.0947585 0.1104975 0.189805
2 colProds_X_S w/ expSumLog 0.220354 0.2223560 0.2641322 0.2398320 0.2857195 0.428113
6 colProds(X[rows, cols]) w/ expSumLog 0.230429 0.2335475 0.2738112 0.2508620 0.2991160 0.402502
4 colProds(X, rows, cols) w/ expSumLog 0.231497 0.2343245 0.2724815 0.2576330 0.2907995 0.420745
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
3 colProds(X, rows, cols) w/ direct 1.138884 1.154316 1.125855 1.154532 1.121757 0.8581684
5 colProds(X[rows, cols]) w/ direct 1.145206 1.150546 1.133299 1.170848 1.130288 0.9468992
2 colProds_X_S w/ expSumLog 2.989513 2.968011 2.916447 2.963395 2.922648 2.1357702
6 colProds(X[rows, cols]) w/ expSumLog 3.126199 3.117396 3.023318 3.099683 3.059682 2.0080020
4 colProds(X, rows, cols) w/ expSumLog 3.140688 3.127767 3.008636 3.183346 2.974611 2.0990127

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.085764 0.0880185 0.1047172 0.1042270 0.1113325 0.158051
5 rowProds(X[cols, rows]) w/ direct 0.096795 0.0980180 0.1143780 0.1058170 0.1240545 0.191773
3 rowProds(X, cols, rows) w/ direct 0.096302 0.0986680 0.1129483 0.1094275 0.1206955 0.207510
6 rowProds(X[cols, rows]) w/ expSumLog 0.242107 0.2439025 0.2871896 0.2593440 0.3062615 0.826660
2 rowProds_X_S w/ expSumLog 0.231956 0.2341890 0.2838343 0.2658600 0.3061985 0.720162
4 rowProds(X, cols, rows) w/ expSumLog 0.240587 0.2451280 0.2930772 0.2885740 0.3132735 0.456473
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 rowProds(X[cols, rows]) w/ direct 1.128620 1.113607 1.092256 1.015255 1.114270 1.213361
3 rowProds(X, cols, rows) w/ direct 1.122872 1.120992 1.078603 1.049896 1.084099 1.312931
6 rowProds(X[cols, rows]) w/ expSumLog 2.822944 2.771037 2.742526 2.488261 2.750872 5.230337
2 rowProds_X_S w/ expSumLog 2.704585 2.660679 2.710485 2.550779 2.750307 4.556517
4 rowProds(X, cols, rows) w/ expSumLog 2.805221 2.784960 2.798750 2.768707 2.813855 2.888137

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x100 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 73.709 74.9175 90.56644 80.9315 97.7605 200.449
2 rowProds_X_S w/ direct 85.764 88.0185 104.71719 104.2270 111.3325 158.051
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
2 rowProds_X_S w/ direct 1.163549 1.174872 1.156247 1.287842 1.138829 0.7884849

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x10 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.030052 0.0340035 0.0390363 0.0376965 0.0416195 0.059581
5 colProds(X[rows, cols]) w/ direct 0.042652 0.0467585 0.0543521 0.0518050 0.0613195 0.090626
3 colProds(X, rows, cols) w/ direct 0.042472 0.0467015 0.0546875 0.0526190 0.0611205 0.086783
2 colProds_X_S w/ expSumLog 0.148410 0.1601030 0.1790544 0.1712910 0.1900625 0.301234
6 colProds(X[rows, cols]) w/ expSumLog 0.160447 0.1735535 0.1978269 0.1889030 0.2119135 0.332199
4 colProds(X, rows, cols) w/ expSumLog 0.161044 0.1750000 0.1971329 0.1917990 0.2140610 0.286676
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 colProds(X[rows, cols]) w/ direct 1.419273 1.375108 1.392346 1.374265 1.473336 1.521055
3 colProds(X, rows, cols) w/ direct 1.413284 1.373432 1.400938 1.395859 1.468554 1.456555
2 colProds_X_S w/ expSumLog 4.938440 4.708427 4.586869 4.543950 4.566669 5.055873
6 colProds(X[rows, cols]) w/ expSumLog 5.338979 5.103989 5.067766 5.011155 5.091688 5.575586
4 colProds(X, rows, cols) w/ expSumLog 5.358845 5.146529 5.049988 5.087979 5.143286 4.811534

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.041595 0.0454475 0.0525412 0.0525010 0.0550535 0.071829
5 rowProds(X[cols, rows]) w/ direct 0.053410 0.0611800 0.0688919 0.0690400 0.0718465 0.092042
3 rowProds(X, cols, rows) w/ direct 0.053330 0.0643215 0.0701024 0.0696200 0.0723155 0.094215
2 rowProds_X_S w/ expSumLog 0.148190 0.1758040 0.1940258 0.1891415 0.2081830 0.284685
6 rowProds(X[cols, rows]) w/ expSumLog 0.161066 0.1798505 0.2034044 0.2043790 0.2124210 0.287890
4 rowProds(X, cols, rows) w/ expSumLog 0.160327 0.1801010 0.2069060 0.2047570 0.2254720 0.269866
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 rowProds(X[cols, rows]) w/ direct 1.284049 1.346169 1.311198 1.315023 1.305031 1.281404
3 rowProds(X, cols, rows) w/ direct 1.282125 1.415292 1.334236 1.326070 1.313549 1.311657
2 rowProds_X_S w/ expSumLog 3.562688 3.868288 3.692829 3.602627 3.781467 3.963371
6 rowProds(X[cols, rows]) w/ expSumLog 3.872244 3.957324 3.871329 3.892859 3.858447 4.007991
4 rowProds(X, cols, rows) w/ expSumLog 3.854478 3.962836 3.937975 3.900059 4.095507 3.757062

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x10 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 30.052 34.0035 39.03631 37.6965 41.6195 59.581
2 rowProds_X_S w/ direct 41.595 45.4475 52.54123 52.5010 55.0535 71.829
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2 rowProds_X_S w/ direct 1.384101 1.336554 1.345958 1.392729 1.322781 1.205569

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

10x1000 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.523648 0.5356855 0.5759407 0.5537635 0.587121 0.875800
5 colProds(X[rows, cols]) w/ direct 0.535452 0.5474045 0.5743448 0.5597895 0.585659 0.784047
3 colProds(X, rows, cols) w/ direct 0.534339 0.5455865 0.5873932 0.5609605 0.589269 0.891698
2 colProds_X_S w/ expSumLog 1.024895 1.0426410 1.1222524 1.0650560 1.158451 1.669401
6 colProds(X[rows, cols]) w/ expSumLog 1.037188 1.0502250 1.1209347 1.0700640 1.135411 1.583419
4 colProds(X, rows, cols) w/ expSumLog 1.032517 1.0540280 1.2408611 1.0860820 1.169466 6.607324
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.0000000 1.0000000
5 colProds(X[rows, cols]) w/ direct 1.022542 1.021877 0.997229 1.010882 0.9975099 0.8952352
3 colProds(X, rows, cols) w/ direct 1.020416 1.018483 1.019885 1.012997 1.0036585 1.0181525
2 colProds_X_S w/ expSumLog 1.957221 1.946368 1.948555 1.923305 1.9731044 1.9061441
6 colProds(X[rows, cols]) w/ expSumLog 1.980697 1.960525 1.946267 1.932348 1.9338620 1.8079687
4 colProds(X, rows, cols) w/ expSumLog 1.971777 1.967625 2.154494 1.961274 1.9918645 7.5443298

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.525206 0.537019 0.5949731 0.5571330 0.598142 1.321915
3 rowProds(X, cols, rows) w/ direct 0.538670 0.548481 0.6469377 0.5689670 0.599152 5.934930
5 rowProds(X[cols, rows]) w/ direct 0.536763 0.549954 0.6483152 0.5736465 0.600296 5.872529
6 rowProds(X[cols, rows]) w/ expSumLog 1.036684 1.057124 1.1446338 1.0820275 1.148299 2.715708
4 rowProds(X, cols, rows) w/ expSumLog 1.033060 1.060096 1.1304942 1.0821795 1.141911 1.701270
2 rowProds_X_S w/ expSumLog 1.024732 1.051346 1.1299487 1.0837890 1.145460 1.937171
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
3 rowProds(X, cols, rows) w/ direct 1.025636 1.021344 1.087339 1.021241 1.001689 4.489646
5 rowProds(X[cols, rows]) w/ direct 1.022005 1.024087 1.089655 1.029640 1.003601 4.442441
6 rowProds(X[cols, rows]) w/ expSumLog 1.973862 1.968504 1.923841 1.942135 1.919777 2.054374
4 rowProds(X, cols, rows) w/ expSumLog 1.966962 1.974037 1.900076 1.942408 1.909096 1.286974
2 rowProds_X_S w/ expSumLog 1.951105 1.957744 1.899159 1.945297 1.915031 1.465428

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 10x1000 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 523.648 535.6855 575.9407 553.7635 587.121 875.800
2 rowProds_X_S w/ direct 525.206 537.0190 594.9731 557.1330 598.142 1321.915
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.00000
2 rowProds_X_S w/ direct 1.002975 1.002489 1.033046 1.006085 1.018771 1.50938

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

100x1000 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.693250 0.7210880 1.0752459 0.7540725 0.861600 24.251464
5 colProds(X[rows, cols]) w/ direct 0.786981 0.8192815 0.9336942 0.8533490 0.962303 2.250769
3 colProds(X, rows, cols) w/ direct 0.796398 0.8288000 0.9344435 0.8703645 0.991692 1.634443
2 colProds_X_S w/ expSumLog 2.137575 2.2014775 2.4854195 2.2775650 2.559591 5.828753
6 colProds(X[rows, cols]) w/ expSumLog 2.258601 2.2933745 2.5132972 2.3563435 2.601824 5.138715
4 colProds(X, rows, cols) w/ expSumLog 2.254370 2.3022690 2.7948370 2.3669620 2.582371 25.151733
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
5 colProds(X[rows, cols]) w/ direct 1.135205 1.136174 0.8683541 1.131654 1.116879 0.0928096
3 colProds(X, rows, cols) w/ direct 1.148789 1.149374 0.8690509 1.154219 1.150989 0.0673956
2 colProds_X_S w/ expSumLog 3.083411 3.052994 2.3114894 3.020353 2.970742 0.2403464
6 colProds(X[rows, cols]) w/ expSumLog 3.257989 3.180436 2.3374163 3.124824 3.019758 0.2118930
4 colProds(X, rows, cols) w/ expSumLog 3.251886 3.192771 2.5992538 3.138905 2.997180 1.0371223

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.826818 0.8845375 1.008451 0.9732775 1.076523 1.749637
5 rowProds(X[cols, rows]) w/ direct 0.980743 1.0651300 1.194578 1.1332255 1.265120 2.544259
3 rowProds(X, cols, rows) w/ direct 0.996019 1.0702235 1.184752 1.1399655 1.265089 1.923425
2 rowProds_X_S w/ expSumLog 2.294785 2.4054455 2.691871 2.5605495 2.800074 4.140237
4 rowProds(X, cols, rows) w/ expSumLog 2.469234 2.5475565 2.855325 2.7065260 3.093694 4.504706
6 rowProds(X[cols, rows]) w/ expSumLog 2.457406 2.5713975 3.324232 2.7079870 2.940023 27.454912
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 rowProds(X[cols, rows]) w/ direct 1.186165 1.204166 1.184567 1.164340 1.175191 1.454164
3 rowProds(X, cols, rows) w/ direct 1.204641 1.209924 1.174823 1.171265 1.175163 1.099328
2 rowProds_X_S w/ expSumLog 2.775441 2.719439 2.669312 2.630853 2.601035 2.366341
4 rowProds(X, cols, rows) w/ expSumLog 2.986430 2.880100 2.831397 2.780837 2.873784 2.574652
6 rowProds(X[cols, rows]) w/ expSumLog 2.972125 2.907053 3.296374 2.782338 2.731036 15.691776

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 100x1000 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 693.250 721.0880 1075.246 754.0725 861.600 24251.464
2 rowProds_X_S w/ direct 826.818 884.5375 1008.451 973.2775 1076.523 1749.637
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
2 rowProds_X_S w/ direct 1.192669 1.226671 0.9378796 1.290695 1.249446 0.0721456

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

1000x100 matrix

> 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]
> colStats <- microbenchmark(`colProds_X_S w/ direct` = colProds(X_S, method = "direct", na.rm = FALSE), 
+     `colProds_X_S w/ expSumLog` = colProds(X_S, method = "expSumLog", na.rm = FALSE), `colProds(X, rows, cols) w/ direct` = colProds(X, 
+         rows = rows, cols = cols, method = "direct", na.rm = FALSE), `colProds(X, rows, cols) w/ expSumLog` = colProds(X, 
+         rows = rows, cols = cols, method = "expSumLog", na.rm = FALSE), `colProds(X[rows, cols]) w/ direct` = colProds(X[rows, 
+         cols], method = "direct", na.rm = FALSE), `colProds(X[rows, cols]) w/ expSumLog` = colProds(X[rows, 
+         cols], method = "expSumLog", na.rm = FALSE), unit = "ms")
> X <- t(X)
> X_S <- t(X_S)
> rowStats <- microbenchmark(`rowProds_X_S w/ direct` = rowProds(X_S, method = "direct", na.rm = FALSE), 
+     `rowProds_X_S w/ expSumLog` = rowProds(X_S, method = "expSumLog", na.rm = FALSE), `rowProds(X, cols, rows) w/ direct` = rowProds(X, 
+         rows = cols, cols = rows, method = "direct", na.rm = FALSE), `rowProds(X, cols, rows) w/ expSumLog` = rowProds(X, 
+         rows = cols, cols = rows, method = "expSumLog", na.rm = FALSE), `rowProds(X[cols, rows]) w/ direct` = rowProds(X[cols, 
+         rows], method = "direct", na.rm = FALSE), `rowProds(X[cols, rows]) w/ expSumLog` = rowProds(X[cols, 
+         rows], method = "expSumLog", na.rm = FALSE), unit = "ms")

Table: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.

  expr min lq mean median uq max
1 colProds_X_S w/ direct 0.238667 0.2472480 0.2776331 0.2557235 0.2985885 0.482010
5 colProds(X[rows, cols]) w/ direct 0.335498 0.3433565 0.4005840 0.3552270 0.4297075 0.723056
3 colProds(X, rows, cols) w/ direct 0.335107 0.3439390 0.3864759 0.3559160 0.3932580 0.688277
2 colProds_X_S w/ expSumLog 1.307053 1.3253225 1.4385322 1.3494585 1.4848140 2.302503
6 colProds(X[rows, cols]) w/ expSumLog 1.408062 1.4204860 1.7333478 1.4364855 1.6093775 11.177601
4 colProds(X, rows, cols) w/ expSumLog 1.403216 1.4319280 1.6079715 1.4876970 1.7257095 2.530356
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 colProds(X[rows, cols]) w/ direct 1.405716 1.388713 1.442854 1.389106 1.439129 1.500085
3 colProds(X, rows, cols) w/ direct 1.404078 1.391069 1.392038 1.391800 1.317057 1.427931
2 colProds_X_S w/ expSumLog 5.476471 5.360296 5.181414 5.277022 4.972777 4.776878
6 colProds(X[rows, cols]) w/ expSumLog 5.899693 5.745187 6.243303 5.617339 5.389951 23.189563
4 colProds(X, rows, cols) w/ expSumLog 5.879388 5.791464 5.791713 5.817600 5.779558 5.249592

Table: Benchmarking of rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on 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 rowProds_X_S w/ direct 0.374254 0.3786410 0.4088243 0.3835165 0.4063745 0.701556
5 rowProds(X[cols, rows]) w/ direct 0.481832 0.4918155 0.5228188 0.4981410 0.5193815 0.813087
3 rowProds(X, cols, rows) w/ direct 0.484074 0.4920385 0.6275272 0.5000475 0.5806940 8.926097
2 rowProds_X_S w/ expSumLog 1.463210 1.4706190 1.6064194 1.4935535 1.6759630 2.421766
6 rowProds(X[cols, rows]) w/ expSumLog 1.570197 1.5803785 1.7876741 1.5888510 1.7326515 10.818760
4 rowProds(X, cols, rows) w/ expSumLog 1.567760 1.5828360 1.6866927 1.6057930 1.7217105 2.216337
  expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
5 rowProds(X[cols, rows]) w/ direct 1.287446 1.298897 1.278835 1.298878 1.278086 1.158977
3 rowProds(X, cols, rows) w/ direct 1.293437 1.299486 1.534956 1.303849 1.428963 12.723285
2 rowProds_X_S w/ expSumLog 3.909671 3.883940 3.929364 3.894366 4.124184 3.451992
6 rowProds(X[cols, rows]) w/ expSumLog 4.195538 4.173818 4.372719 4.142849 4.263682 15.421093
4 rowProds(X, cols, rows) w/ expSumLog 4.189027 4.180308 4.125715 4.187024 4.236758 3.159173

Figure: Benchmarking of colProds_X_S w/ direct(), colProds_X_S w/ expSumLog(), colProds(X, rows, cols) w/ direct(), colProds(X, rows, cols) w/ expSumLog(), colProds(X[rows, cols]) w/ direct() and colProds(X[rows, cols]) w/ expSumLog() on 1000x100 data as well as rowProds_X_S w/ direct(), rowProds_X_S w/ expSumLog(), rowProds(X, cols, rows) w/ direct(), rowProds(X, cols, rows) w/ expSumLog(), rowProds(X[cols, rows]) w/ direct() and rowProds(X[cols, rows]) w/ expSumLog() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 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 colProds_X_S w/ direct 238.667 247.248 277.6331 255.7235 298.5885 482.010
2 rowProds_X_S w/ direct 374.254 378.641 408.8243 383.5165 406.3745 701.556
  expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.00000
2 rowProds_X_S w/ direct 1.568101 1.531422 1.472534 1.499731 1.360985 1.45548

Figure: Benchmarking of colProds_X_S w/ direct() and rowProds_X_S w/ direct() on 1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

Appendix

Session information

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 17.82 secs.

Reproducibility

To reproduce this report, do:

html <- matrixStats:::benchmark('colRowProds_subset')

Copyright Dongcan Jiang. Last updated on 2021-08-25 22:24:46 (+0200 UTC). Powered by RSP.