colRowProds_subset - HenrikBengtsson/matrixStats GitHub Wiki

matrixStats: Benchmark report


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.006574 0.0069430 0.0071247 0.0070850 0.0072895 0.008511
5 colProds(X[rows, cols]) w/ direct 0.007490 0.0078390 0.0098292 0.0080165 0.0082475 0.178016
3 colProds(X, rows, cols) w/ direct 0.007582 0.0079545 0.0082020 0.0080875 0.0082220 0.013044
2 colProds_X_S w/ expSumLog 0.010022 0.0102775 0.0105636 0.0104185 0.0106050 0.014128
4 colProds(X, rows, cols) w/ expSumLog 0.010984 0.0112670 0.0114605 0.0114155 0.0116115 0.012152
6 colProds(X[rows, cols]) w/ expSumLog 0.011065 0.0112560 0.0119108 0.0114400 0.0116870 0.047841
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.139337 1.129051 1.379586 1.131475 1.131422 20.915991
3 colProds(X, rows, cols) w/ direct 1.153331 1.145686 1.151204 1.141496 1.127924 1.532605
2 colProds_X_S w/ expSumLog 1.524490 1.480268 1.482663 1.470501 1.454832 1.659970
4 colProds(X, rows, cols) w/ expSumLog 1.670824 1.622785 1.608546 1.611221 1.592908 1.427799
6 colProds(X[rows, cols]) w/ expSumLog 1.683146 1.621201 1.671754 1.614679 1.603265 5.621079

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.006738 0.0070710 0.0073595 0.0072715 0.0074905 0.011981
3 rowProds(X, cols, rows) w/ direct 0.007482 0.0078915 0.0081667 0.0081400 0.0082800 0.012108
5 rowProds(X[cols, rows]) w/ direct 0.007543 0.0078915 0.0082164 0.0081600 0.0083070 0.014121
2 rowProds_X_S w/ expSumLog 0.010219 0.0105890 0.0108469 0.0107545 0.0108770 0.014269
6 rowProds(X[cols, rows]) w/ expSumLog 0.010938 0.0113800 0.0116240 0.0115955 0.0118485 0.012620
4 rowProds(X, cols, rows) w/ expSumLog 0.010934 0.0114195 0.0135372 0.0116845 0.0119265 0.197744
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.110418 1.116037 1.109678 1.119439 1.105400 1.010600
5 rowProds(X[cols, rows]) w/ direct 1.119472 1.116037 1.116431 1.122189 1.109005 1.178616
2 rowProds_X_S w/ expSumLog 1.516622 1.497525 1.473852 1.478993 1.452106 1.190969
6 rowProds(X[cols, rows]) w/ expSumLog 1.623330 1.609390 1.579444 1.594650 1.581804 1.053334
4 rowProds(X, cols, rows) w/ expSumLog 1.622737 1.614977 1.839410 1.606890 1.592217 16.504799

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 6.574 6.943 7.12474 7.0850 7.2895 8.511
2 rowProds_X_S w/ direct 6.738 7.071 7.35954 7.2715 7.4905 11.981
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.024947 1.018436 1.032956 1.026323 1.027574 1.407708

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.062196 0.0635055 0.0650804 0.0641395 0.0648185 0.084518
3 colProds(X, rows, cols) w/ direct 0.077699 0.0792800 0.0811228 0.0801055 0.0807855 0.116971
5 colProds(X[rows, cols]) w/ direct 0.078160 0.0794085 0.0816097 0.0802020 0.0807760 0.163951
2 colProds_X_S w/ expSumLog 0.191173 0.1932180 0.1959093 0.1947870 0.1960110 0.239191
4 colProds(X, rows, cols) w/ expSumLog 0.206916 0.2091165 0.2123489 0.2102570 0.2128055 0.265087
6 colProds(X[rows, cols]) w/ expSumLog 0.207142 0.2091545 0.2127304 0.2105520 0.2135045 0.244942
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
3 colProds(X, rows, cols) w/ direct 1.249260 1.248396 1.246501 1.248926 1.246334 1.383977
5 colProds(X[rows, cols]) w/ direct 1.256673 1.250419 1.253981 1.250431 1.246187 1.939835
2 colProds_X_S w/ expSumLog 3.073719 3.042540 3.010263 3.036927 3.023998 2.830060
4 colProds(X, rows, cols) w/ expSumLog 3.326838 3.292888 3.262868 3.278120 3.283098 3.136456
6 colProds(X[rows, cols]) w/ expSumLog 3.330471 3.293486 3.268730 3.282720 3.293882 2.898105

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.071789 0.0730110 0.0753321 0.0741165 0.0756955 0.124923
3 rowProds(X, cols, rows) w/ direct 0.079491 0.0810540 0.0834618 0.0820715 0.0827545 0.117377
5 rowProds(X[cols, rows]) w/ direct 0.080014 0.0812495 0.0830881 0.0822250 0.0831610 0.115756
2 rowProds_X_S w/ expSumLog 0.202001 0.2034850 0.2056392 0.2043945 0.2056835 0.238712
4 rowProds(X, cols, rows) w/ expSumLog 0.209985 0.2118575 0.2183014 0.2131770 0.2162840 0.457109
6 rowProds(X[cols, rows]) w/ expSumLog 0.209854 0.2120685 0.2172871 0.2132150 0.2153450 0.406702
expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
3 rowProds(X, cols, rows) w/ direct 1.107287 1.110162 1.107919 1.107331 1.093255 0.9395948
5 rowProds(X[cols, rows]) w/ direct 1.114572 1.112839 1.102957 1.109402 1.098625 0.9266188
2 rowProds_X_S w/ expSumLog 2.813816 2.787046 2.729768 2.757746 2.717249 1.9108731
4 rowProds(X, cols, rows) w/ expSumLog 2.925030 2.901720 2.897853 2.876242 2.857290 3.6591260
6 rowProds(X[cols, rows]) w/ expSumLog 2.923205 2.904610 2.884388 2.876755 2.844885 3.2556215

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 62.196 63.5055 65.08045 64.1395 64.8185 84.518
2 rowProds_X_S w/ direct 71.789 73.0110 75.33212 74.1165 75.6955 124.923
expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.00000 1.000000 1.000000 1.000000 1.000000
2 rowProds_X_S w/ direct 1.154238 1.14968 1.157523 1.155552 1.167807 1.478064

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.022963 0.0237295 0.0245293 0.0241340 0.0250465 0.028994
3 colProds(X, rows, cols) w/ direct 0.038542 0.0392830 0.0402477 0.0398760 0.0410090 0.045312
5 colProds(X[rows, cols]) w/ direct 0.038777 0.0396855 0.0408819 0.0402965 0.0414080 0.057943
2 colProds_X_S w/ expSumLog 0.125332 0.1266020 0.1278879 0.1273435 0.1282895 0.143566
4 colProds(X, rows, cols) w/ expSumLog 0.141464 0.1425290 0.1444206 0.1431545 0.1443785 0.219443
6 colProds(X[rows, cols]) w/ expSumLog 0.141303 0.1425760 0.1438359 0.1433560 0.1445395 0.152871
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
3 colProds(X, rows, cols) w/ direct 1.678439 1.655450 1.640804 1.652275 1.637315 1.562806
5 colProds(X[rows, cols]) w/ direct 1.688673 1.672412 1.666657 1.669698 1.653245 1.998448
2 colProds_X_S w/ expSumLog 5.457998 5.335216 5.213683 5.276519 5.122053 4.951576
4 colProds(X, rows, cols) w/ expSumLog 6.160519 6.006405 5.887681 5.931652 5.764418 7.568566
6 colProds(X[rows, cols]) w/ expSumLog 6.153508 6.008386 5.863846 5.940002 5.770846 5.272505

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.031138 0.0321060 0.0329588 0.0326445 0.0336135 0.036702
5 rowProds(X[cols, rows]) w/ direct 0.041048 0.0420770 0.0430687 0.0426585 0.0439805 0.047612
3 rowProds(X, cols, rows) w/ direct 0.040562 0.0421290 0.0432120 0.0428770 0.0440485 0.049557
2 rowProds_X_S w/ expSumLog 0.135012 0.1359125 0.1369962 0.1364410 0.1377280 0.144627
4 rowProds(X, cols, rows) w/ expSumLog 0.144450 0.1457700 0.1468335 0.1463025 0.1476310 0.153840
6 rowProds(X[cols, rows]) w/ expSumLog 0.144599 0.1459545 0.1479288 0.1466095 0.1478550 0.240112
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.318261 1.310565 1.306744 1.306759 1.308418 1.297259
3 rowProds(X, cols, rows) w/ direct 1.302653 1.312185 1.311092 1.313452 1.310441 1.350253
2 rowProds_X_S w/ expSumLog 4.335924 4.233243 4.156595 4.179602 4.097401 3.940575
4 rowProds(X, cols, rows) w/ expSumLog 4.639026 4.540273 4.455068 4.481689 4.392015 4.191597
6 rowProds(X[cols, rows]) w/ expSumLog 4.643811 4.546019 4.488302 4.491093 4.398679 6.542205

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 22.963 23.7295 24.52928 24.1340 25.0465 28.994
2 rowProds_X_S w/ direct 31.138 32.1060 32.95875 32.6445 33.6135 36.702
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.356008 1.352999 1.343649 1.352635 1.342044 1.265848

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.443144 0.4702645 0.5371574 0.4830220 0.5036900 5.569495
5 colProds(X[rows, cols]) w/ direct 0.452201 0.4738010 0.4949254 0.4923220 0.5074575 0.657085
3 colProds(X, rows, cols) w/ direct 0.455445 0.4838360 0.5032810 0.4990385 0.5137115 0.602106
2 colProds_X_S w/ expSumLog 0.805423 0.8385925 0.9264479 0.8658590 0.8941155 5.947703
6 colProds(X[rows, cols]) w/ expSumLog 0.815253 0.8540285 0.8848640 0.8810710 0.9045925 1.023303
4 colProds(X, rows, cols) w/ expSumLog 0.817826 0.8579660 0.8888690 0.8817405 0.9097020 1.018013
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.020438 1.007520 0.9213787 1.019254 1.007480 0.1179793
3 colProds(X, rows, cols) w/ direct 1.027759 1.028859 0.9369339 1.033159 1.019896 0.1081078
2 colProds_X_S w/ expSumLog 1.817520 1.783236 1.7247231 1.792587 1.775130 1.0679071
6 colProds(X[rows, cols]) w/ expSumLog 1.839702 1.816060 1.6473084 1.824080 1.795931 0.1837335
4 colProds(X, rows, cols) w/ expSumLog 1.845508 1.824433 1.6547644 1.825467 1.806075 0.1827837

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.452031 0.4696240 0.4958651 0.4909225 0.5074250 0.827912
5 rowProds(X[cols, rows]) w/ direct 0.461406 0.4754990 0.5027588 0.4971750 0.5220060 0.621393
3 rowProds(X, cols, rows) w/ direct 0.463121 0.4794815 0.5041696 0.4973430 0.5193365 0.579636
2 rowProds_X_S w/ expSumLog 0.817300 0.8511180 0.9476184 0.8749390 0.9055550 6.048890
6 rowProds(X[cols, rows]) w/ expSumLog 0.831767 0.8556450 0.8973632 0.8938940 0.9186840 1.049984
4 rowProds(X, cols, rows) w/ expSumLog 0.830980 0.8594300 0.9692100 0.8972895 0.9322075 5.945592
expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.000000 1.000000 1.000000 1.0000000
5 rowProds(X[cols, rows]) w/ direct 1.020740 1.012510 1.013902 1.012736 1.028735 0.7505544
3 rowProds(X, cols, rows) w/ direct 1.024534 1.020990 1.016747 1.013078 1.023474 0.7001179
2 rowProds_X_S w/ expSumLog 1.808062 1.812339 1.911041 1.782234 1.784609 7.3061992
6 rowProds(X[cols, rows]) w/ expSumLog 1.840066 1.821979 1.809692 1.820845 1.810482 1.2682314
4 rowProds(X, cols, rows) w/ expSumLog 1.838325 1.830038 1.954584 1.827762 1.837134 7.1814299

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 443.144 470.2645 537.1574 483.0220 503.690 5569.495
2 rowProds_X_S w/ direct 452.031 469.6240 495.8651 490.9225 507.425 827.912
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.020054 0.998638 0.923128 1.016356 1.007415 0.1486512

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.592488 0.6090990 0.6344606 0.6141315 0.6258575 0.993837
3 colProds(X, rows, cols) w/ direct 0.742322 0.7607325 0.9571598 0.7680960 0.7844370 17.610742
5 colProds(X[rows, cols]) w/ direct 0.745049 0.7599220 1.1364363 0.7681500 0.7900630 17.967025
2 colProds_X_S w/ expSumLog 1.901336 1.9213535 1.9930555 1.9552115 1.9893900 2.613759
4 colProds(X, rows, cols) w/ expSumLog 2.049062 2.0702500 2.3208638 2.1125090 2.1379740 18.522131
6 colProds(X[rows, cols]) w/ expSumLog 2.051187 2.0951040 2.1664036 2.1148060 2.1630950 2.773091
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
3 colProds(X, rows, cols) w/ direct 1.252889 1.248947 1.508620 1.250703 1.253380 17.719950
5 colProds(X[rows, cols]) w/ direct 1.257492 1.247617 1.791185 1.250791 1.262369 18.078442
2 colProds_X_S w/ expSumLog 3.209071 3.154419 3.141338 3.183702 3.178663 2.629967
4 colProds(X, rows, cols) w/ expSumLog 3.458403 3.398873 3.658011 3.439832 3.416072 18.636991
6 colProds(X[rows, cols]) w/ expSumLog 3.461989 3.439677 3.414560 3.443572 3.456210 2.790287

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.699797 0.7166085 0.9502186 0.7431445 0.8371100 17.605583
3 rowProds(X, cols, rows) w/ direct 0.856031 0.8707645 0.9158276 0.8841270 0.9101815 1.294338
5 rowProds(X[cols, rows]) w/ direct 0.853192 0.8721490 1.0934116 0.8879830 0.9343385 17.960586
2 rowProds_X_S w/ expSumLog 2.013450 2.0457340 2.3256908 2.0748135 2.1710325 19.122286
4 rowProds(X, cols, rows) w/ expSumLog 2.153939 2.1968730 2.4756826 2.2229345 2.2726920 19.692671
6 rowProds(X[cols, rows]) w/ expSumLog 2.176183 2.2032095 2.3390805 2.2442065 2.3320435 3.393626
expr min lq mean median uq max
1 rowProds_X_S w/ direct 1.000000 1.000000 1.0000000 1.000000 1.000000 1.0000000
3 rowProds(X, cols, rows) w/ direct 1.223256 1.215119 0.9638073 1.189711 1.087290 0.0735186
5 rowProds(X[cols, rows]) w/ direct 1.219199 1.217051 1.1506948 1.194900 1.116148 1.0201642
2 rowProds_X_S w/ expSumLog 2.877191 2.854744 2.4475325 2.791938 2.593485 1.0861490
4 rowProds(X, cols, rows) w/ expSumLog 3.077948 3.065653 2.6053823 2.991255 2.714926 1.1185469
6 rowProds(X[cols, rows]) w/ expSumLog 3.109735 3.074495 2.4616237 3.019879 2.785827 0.1927585

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 592.488 609.0990 634.4606 614.1315 625.8575 993.837
2 rowProds_X_S w/ direct 699.797 716.6085 950.2186 743.1445 837.1100 17605.583
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.181116 1.176506 1.497679 1.210074 1.337541 17.71476

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.195657 0.1991355 0.2116703 0.204477 0.2132795 0.261516
3 colProds(X, rows, cols) w/ direct 0.264200 0.2685380 0.3576360 0.281772 0.2891010 7.445191
5 colProds(X[rows, cols]) w/ direct 0.263963 0.2708105 0.3669107 0.283317 0.2901915 7.748395
2 colProds_X_S w/ expSumLog 1.225311 1.2389830 1.2784974 1.244929 1.2768285 1.581018
4 colProds(X, rows, cols) w/ expSumLog 1.298622 1.3047600 1.3459490 1.316818 1.3275575 1.765900
6 colProds(X[rows, cols]) w/ expSumLog 1.297642 1.3088775 1.4524733 1.321813 1.4109380 8.650490
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
3 colProds(X, rows, cols) w/ direct 1.350322 1.348519 1.689590 1.378013 1.355503 28.469352
5 colProds(X[rows, cols]) w/ direct 1.349111 1.359931 1.733407 1.385569 1.360616 29.628761
2 colProds_X_S w/ expSumLog 6.262546 6.221809 6.040041 6.088357 5.986644 6.045588
4 colProds(X, rows, cols) w/ expSumLog 6.637238 6.552122 6.358704 6.439932 6.224496 6.752550
6 colProds(X[rows, cols]) w/ expSumLog 6.632229 6.572798 6.861960 6.464363 6.615441 33.078244

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.300104 0.3051760 0.3285277 0.3092735 0.3281365 0.518286
3 rowProds(X, cols, rows) w/ direct 0.381083 0.3941565 0.5694519 0.4015435 0.4208940 8.705449
5 rowProds(X[cols, rows]) w/ direct 0.379665 0.3951705 0.4271570 0.4016900 0.4393575 0.626979
2 rowProds_X_S w/ expSumLog 1.344601 1.3625165 1.4286976 1.3694475 1.4061200 1.931190
6 rowProds(X[cols, rows]) w/ expSumLog 1.437370 1.4508460 1.6130615 1.4610220 1.5417725 9.368408
4 rowProds(X, cols, rows) w/ expSumLog 1.430326 1.4508200 1.5657706 1.4632290 1.6107655 2.447405
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.269837 1.291571 1.733345 1.298344 1.282680 16.796612
5 rowProds(X[cols, rows]) w/ direct 1.265111 1.294894 1.300216 1.298818 1.338947 1.209716
2 rowProds_X_S w/ expSumLog 4.480450 4.464691 4.348789 4.427950 4.285168 3.726109
6 rowProds(X[cols, rows]) w/ expSumLog 4.789573 4.754129 4.909971 4.724045 4.698571 18.075750
4 rowProds(X, cols, rows) w/ expSumLog 4.766101 4.754044 4.766024 4.731181 4.908828 4.722113

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 195.657 199.1355 211.6703 204.4770 213.2795 261.516
2 rowProds_X_S w/ direct 300.104 305.1760 328.5277 309.2735 328.1365 518.286
expr min lq mean median uq max
1 colProds_X_S w/ direct 1.000000 1.000000 1.000000 1.00000 1.000000 1.000000
2 rowProds_X_S w/ direct 1.533827 1.532504 1.552072 1.51251 1.538528 1.981852

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

Reproducibility

To reproduce this report, do:

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

Copyright Dongcan Jiang. Last updated on 2019-09-10 20:48:54 (-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>
⚠️ **GitHub.com Fallback** ⚠️