This report benchmark the performance of colCounts() and rowCounts() against alternative methods.
> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+10x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.006637 | 0.0074975 | 0.0086075 | 0.0084710 | 0.0092560 | 0.021353 |
| 1 | colCounts | 0.007628 | 0.0084885 | 0.0101686 | 0.0099405 | 0.0106820 | 0.039195 |
| 3 | apply+sum | 0.042442 | 0.0444445 | 0.0475001 | 0.0453995 | 0.0470155 | 0.127609 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.149314 | 1.132177 | 1.181375 | 1.173474 | 1.154062 | 1.835573 |
| 3 | apply+sum | 6.394757 | 5.927909 | 5.518477 | 5.359403 | 5.079462 | 5.976163 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+10x10 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 0.007533 | 0.0081670 | 0.0089452 | 0.0087740 | 0.0093810 | 0.019723 |
| 1 | rowCounts | 0.006886 | 0.0075145 | 0.0086889 | 0.0088570 | 0.0093275 | 0.031768 |
| 3 | apply+sum | 0.042136 | 0.0434245 | 0.0452873 | 0.0443105 | 0.0451515 | 0.111802 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | rowCounts | 0.9141112 | 0.9201053 | 0.9713412 | 1.009460 | 0.994297 | 1.610708 |
| 3 | apply+sum | 5.5935218 | 5.3170687 | 5.0627306 | 5.050205 | 4.813080 | 5.668610 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+10x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 6.886 | 7.5145 | 8.68887 | 8.8570 | 9.3275 | 31.768 |
| 1 | colCounts | 7.628 | 8.4885 | 10.16864 | 9.9405 | 10.6820 | 39.195 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.107755 | 1.129616 | 1.170306 | 1.122333 | 1.145216 | 1.233789 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+100x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.036613 | 0.041205 | 0.0485826 | 0.0437540 | 0.0514525 | 0.096302 |
| 1 | colCounts | 0.046368 | 0.054052 | 0.0619034 | 0.0569535 | 0.0664380 | 0.111596 |
| 3 | apply+sum | 0.279104 | 0.294825 | 0.3486344 | 0.3095320 | 0.3654120 | 0.714795 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.266435 | 1.311783 | 1.274190 | 1.301675 | 1.291249 | 1.158813 |
| 3 | apply+sum | 7.623085 | 7.155078 | 7.176116 | 7.074370 | 7.101929 | 7.422432 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+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 | rowCounts | 0.057531 | 0.0645465 | 0.0710855 | 0.0679245 | 0.0790695 | 0.106873 |
| 2 | rowSums | 0.064276 | 0.0698320 | 0.0766227 | 0.0731645 | 0.0825285 | 0.101898 |
| 3 | apply+sum | 0.269382 | 0.2900325 | 0.3231464 | 0.3032355 | 0.3518315 | 0.500762 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowSums | 1.117241 | 1.081887 | 1.077894 | 1.077144 | 1.043746 | 0.9534494 |
| 3 | apply+sum | 4.682380 | 4.493389 | 4.545880 | 4.464302 | 4.449649 | 4.6855801 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+100x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | colCounts | 46.368 | 54.0520 | 61.90345 | 56.9535 | 66.4380 | 111.596 |
| 2 | rowCounts | 57.531 | 64.5465 | 71.08554 | 67.9245 | 79.0695 | 106.873 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCounts | 1.240748 | 1.194156 | 1.148329 | 1.192631 | 1.190125 | 0.9576777 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+1000x10 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.040137 | 0.0421630 | 0.0474956 | 0.0465065 | 0.0514625 | 0.081884 |
| 1 | colCounts | 0.052461 | 0.0558320 | 0.0625140 | 0.0627235 | 0.0680485 | 0.097588 |
| 3 | apply+sum | 0.140143 | 0.1500765 | 0.1682931 | 0.1673095 | 0.1828435 | 0.253373 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.307048 | 1.324194 | 1.316207 | 1.348704 | 1.322293 | 1.191784 |
| 3 | apply+sum | 3.491616 | 3.559436 | 3.543342 | 3.597551 | 3.552946 | 3.094292 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+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 | rowCounts | 0.063240 | 0.0717505 | 0.0818468 | 0.0806795 | 0.0892285 | 0.121437 |
| 3 | apply+sum | 0.128911 | 0.1403345 | 0.1584276 | 0.1466985 | 0.1698245 | 0.279525 |
| 2 | rowSums | 0.181311 | 0.1958575 | 0.2189991 | 0.2067755 | 0.2502660 | 0.291389 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | apply+sum | 2.038441 | 1.955868 | 1.935661 | 1.818287 | 1.903254 | 2.301811 |
| 2 | rowSums | 2.867030 | 2.729702 | 2.675721 | 2.562925 | 2.804777 | 2.399508 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+1000x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | colCounts | 52.461 | 55.8320 | 62.51403 | 62.7235 | 68.0485 | 97.588 |
| 2 | rowCounts | 63.240 | 71.7505 | 81.84676 | 80.6795 | 89.2285 | 121.437 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCounts | 1.205467 | 1.285114 | 1.309254 | 1.286272 | 1.311249 | 1.244385 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+10x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.030149 | 0.0337400 | 0.0392194 | 0.0360760 | 0.0420580 | 0.094415 |
| 1 | colCounts | 0.046557 | 0.0510365 | 0.0592526 | 0.0544325 | 0.0624885 | 0.113113 |
| 3 | apply+sum | 1.343127 | 1.4221290 | 1.5662842 | 1.4696620 | 1.6894220 | 2.341717 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 1 | colCounts | 1.54423 | 1.512641 | 1.510798 | 1.508829 | 1.48577 | 1.198041 |
| 3 | apply+sum | 44.54964 | 42.149644 | 39.936445 | 40.737942 | 40.16886 | 24.802383 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+10x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 0.045039 | 0.0469505 | 0.0558209 | 0.0488900 | 0.0635320 | 0.098466 |
| 1 | rowCounts | 0.049883 | 0.0529590 | 0.0629626 | 0.0565735 | 0.0701535 | 0.119705 |
| 3 | apply+sum | 1.301806 | 1.3719245 | 1.5317904 | 1.4278580 | 1.6298125 | 2.574432 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | rowCounts | 1.107551 | 1.127975 | 1.127939 | 1.157159 | 1.104223 | 1.215699 |
| 3 | apply+sum | 28.903972 | 29.220658 | 27.441163 | 29.205523 | 25.653411 | 26.145390 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+10x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | colCounts | 46.557 | 51.0365 | 59.25263 | 54.4325 | 62.4885 | 113.113 |
| 2 | rowCounts | 49.883 | 52.9590 | 62.96258 | 56.5735 | 70.1535 | 119.705 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCounts | 1.071439 | 1.037669 | 1.062612 | 1.039333 | 1.122663 | 1.058278 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+100x1000 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.261343 | 0.271250 | 0.3191512 | 0.2892330 | 0.3850325 | 0.500749 |
| 1 | colCounts | 0.361892 | 0.366153 | 0.3924876 | 0.3792425 | 0.4025380 | 0.633757 |
| 3 | apply+sum | 2.108871 | 2.163654 | 2.6068709 | 2.2452695 | 2.5927860 | 21.148136 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.384740 | 1.349873 | 1.229786 | 1.311201 | 1.045465 | 1.265618 |
| 3 | apply+sum | 8.069361 | 7.976605 | 8.168136 | 7.762840 | 6.733941 | 42.233007 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+100x1000 data (transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 0.403698 | 0.4098275 | 0.4334788 | 0.4194305 | 0.4459425 | 0.592782 |
| 1 | rowCounts | 0.451865 | 0.4645505 | 0.4940684 | 0.4706145 | 0.4872320 | 0.791381 |
| 3 | apply+sum | 2.118802 | 2.1820775 | 2.5680281 | 2.2493745 | 2.4374345 | 20.257636 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | rowCounts | 1.119314 | 1.133527 | 1.139775 | 1.122032 | 1.092589 | 1.335029 |
| 3 | apply+sum | 5.248483 | 5.324380 | 5.924230 | 5.362925 | 5.465804 | 34.173838 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+100x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | colCounts | 361.892 | 366.1530 | 392.4876 | 379.2425 | 402.538 | 633.757 |
| 2 | rowCounts | 451.865 | 464.5505 | 494.0684 | 470.6145 | 487.232 | 791.381 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 | 1.000000 |
| 2 | rowCounts | 1.248618 | 1.268733 | 1.258813 | 1.240933 | 1.2104 | 1.248714 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() on logical+1000x100 data. The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.264137 | 0.2669930 | 0.2846517 | 0.2701910 | 0.2808895 | 0.431141 |
| 1 | colCounts | 0.354495 | 0.3570615 | 0.4031536 | 0.3604420 | 0.4485740 | 0.626658 |
| 3 | apply+sum | 0.923800 | 0.9360290 | 1.1117882 | 0.9454405 | 1.1225460 | 8.602520 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.342088 | 1.337344 | 1.416305 | 1.334027 | 1.596977 | 1.453487 |
| 3 | apply+sum | 3.497428 | 3.505819 | 3.905785 | 3.499156 | 3.996397 | 19.952916 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() on logical+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 | rowCounts | 0.458440 | 0.462624 | 0.5097221 | 0.4677710 | 0.5445670 | 0.784485 |
| 2 | rowSums | 0.504967 | 0.506294 | 0.6187105 | 0.5093805 | 0.5350145 | 8.288021 |
| 3 | apply+sum | 0.927031 | 0.935527 | 1.0321958 | 0.9468965 | 1.0924870 | 1.650107 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 | 1.000000 |
| 2 | rowSums | 1.101490 | 1.094396 | 1.213819 | 1.088953 | 0.9824585 | 10.564920 |
| 3 | apply+sum | 2.022143 | 2.022219 | 2.025017 | 2.024274 | 2.0061572 | 2.103427 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on logical+1000x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on logical+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 | colCounts | 354.495 | 357.0615 | 403.1535 | 360.442 | 448.574 | 626.658 |
| 2 | rowCounts | 458.440 | 462.6240 | 509.7221 | 467.771 | 544.567 | 784.485 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.00000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 |
| 2 | rowCounts | 1.29322 | 1.295642 | 1.264337 | 1.29777 | 1.213996 | 1.251855 |
Figure: Benchmarking of colCounts() and rowCounts() on logical+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.006601 | 0.0073435 | 0.0082847 | 0.0080050 | 0.0088390 | 0.020946 |
| 1 | colCounts | 0.007739 | 0.0084800 | 0.0097130 | 0.0091470 | 0.0103835 | 0.036537 |
| 3 | apply+sum | 0.040574 | 0.0431430 | 0.0451899 | 0.0439965 | 0.0449600 | 0.119376 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.172398 | 1.154763 | 1.172396 | 1.142661 | 1.174737 | 1.744343 |
| 3 | apply+sum | 6.146644 | 5.874992 | 5.454610 | 5.496127 | 5.086548 | 5.699227 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.006743 | 0.0074120 | 0.0085415 | 0.0085295 | 0.009106 | 0.032106 |
| 2 | rowSums | 0.007384 | 0.0081045 | 0.0088217 | 0.0088050 | 0.009185 | 0.020475 |
| 3 | apply+sum | 0.040285 | 0.0422760 | 0.0446876 | 0.0434820 | 0.044954 | 0.114754 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowSums | 1.095061 | 1.093430 | 1.032803 | 1.032300 | 1.008676 | 0.6377313 |
| 3 | apply+sum | 5.974344 | 5.703724 | 5.231806 | 5.097837 | 4.936745 | 3.5742229 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+10x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 6.743 | 7.412 | 8.54153 | 8.5295 | 9.1060 | 32.106 |
| 1 | colCounts | 7.739 | 8.480 | 9.71297 | 9.1470 | 10.3835 | 36.537 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.147709 | 1.144091 | 1.137146 | 1.072396 | 1.140292 | 1.138012 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.015060 | 0.0170060 | 0.0195454 | 0.0182665 | 0.0207300 | 0.060797 |
| 2 | colSums | 0.038388 | 0.0404445 | 0.0444467 | 0.0429670 | 0.0473505 | 0.064552 |
| 3 | apply+sum | 0.275794 | 0.2877540 | 0.3156357 | 0.2977740 | 0.3343565 | 0.470952 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 2.549004 | 2.378249 | 2.274023 | 2.352229 | 2.284153 | 1.061763 |
| 3 | apply+sum | 18.313015 | 16.920734 | 16.148849 | 16.301645 | 16.129112 | 7.746303 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.022701 | 0.0255260 | 0.0284739 | 0.0268385 | 0.0310915 | 0.056978 |
| 2 | rowSums | 0.066303 | 0.0706665 | 0.0770138 | 0.0742000 | 0.0847910 | 0.100826 |
| 3 | apply+sum | 0.265447 | 0.2830700 | 0.3139990 | 0.2967430 | 0.3425350 | 0.498593 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 2.920708 | 2.768413 | 2.704718 | 2.764685 | 2.727144 | 1.769560 |
| 3 | apply+sum | 11.693185 | 11.089477 | 11.027618 | 11.056616 | 11.016998 | 8.750623 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+100x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | colCounts | 15.060 | 17.006 | 19.54540 | 18.2665 | 20.7300 | 60.797 |
| 2 | rowCounts | 22.701 | 25.526 | 28.47387 | 26.8385 | 31.0915 | 56.978 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.00000 | 1.000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCounts | 1.50737 | 1.501 | 1.456807 | 1.469274 | 1.499831 | 0.9371844 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.014731 | 0.0162690 | 0.0188388 | 0.017977 | 0.0195425 | 0.044159 |
| 2 | colSums | 0.039821 | 0.0416310 | 0.0452287 | 0.043642 | 0.0465020 | 0.080237 |
| 3 | apply+sum | 0.131626 | 0.1374625 | 0.1502718 | 0.146252 | 0.1620910 | 0.219330 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 2.703211 | 2.558916 | 2.400825 | 2.427658 | 2.379532 | 1.817002 |
| 3 | apply+sum | 8.935306 | 8.449352 | 7.976712 | 8.135506 | 8.294282 | 4.966824 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.021535 | 0.0241480 | 0.0273777 | 0.026082 | 0.0295095 | 0.054413 |
| 3 | apply+sum | 0.123974 | 0.1293700 | 0.1439065 | 0.136203 | 0.1559240 | 0.217259 |
| 2 | rowSums | 0.186170 | 0.1939435 | 0.2148926 | 0.202771 | 0.2400175 | 0.275024 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | apply+sum | 5.756861 | 5.357380 | 5.256330 | 5.222107 | 5.283858 | 3.992777 |
| 2 | rowSums | 8.644996 | 8.031452 | 7.849169 | 7.774366 | 8.133567 | 5.054380 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+1000x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | colCounts | 14.731 | 16.269 | 18.83882 | 17.977 | 19.5425 | 44.159 |
| 2 | rowCounts | 21.535 | 24.148 | 27.37775 | 26.082 | 29.5095 | 54.413 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCounts | 1.461883 | 1.484295 | 1.453262 | 1.450854 | 1.510017 | 1.232206 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.014284 | 0.017018 | 0.0204368 | 0.0188795 | 0.022283 | 0.054180 |
| 2 | colSums | 0.030019 | 0.033480 | 0.0402092 | 0.0370550 | 0.043343 | 0.082655 |
| 3 | apply+sum | 1.311593 | 1.356021 | 1.5096524 | 1.4310310 | 1.609368 | 2.192649 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 2.101582 | 1.967329 | 1.967491 | 1.962711 | 1.945115 | 1.525563 |
| 3 | apply+sum | 91.822529 | 79.681602 | 73.869314 | 75.798141 | 72.224050 | 40.469712 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.018723 | 0.0206040 | 0.0244442 | 0.0223830 | 0.0264935 | 0.068516 |
| 2 | rowSums | 0.044882 | 0.0465705 | 0.0528485 | 0.0482725 | 0.0579840 | 0.092586 |
| 3 | apply+sum | 1.302213 | 1.3477245 | 1.4650412 | 1.3794150 | 1.5630885 | 2.099991 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 2.397159 | 2.260265 | 2.162008 | 2.156659 | 2.188612 | 1.351305 |
| 3 | apply+sum | 69.551514 | 65.410818 | 59.934201 | 61.627798 | 58.998943 | 30.649644 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+10x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on integer+10x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 14.284 | 17.018 | 20.43680 | 18.8795 | 22.2830 | 54.180 |
| 2 | rowCounts | 18.723 | 20.604 | 24.44416 | 22.3830 | 26.4935 | 68.516 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 |
| 2 | rowCounts | 1.310767 | 1.210718 | 1.196085 | 1.185572 | 1.188956 | 1.2646 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.074836 | 0.0785405 | 0.0865373 | 0.0823900 | 0.0877020 | 0.151099 |
| 2 | colSums | 0.261191 | 0.2710265 | 0.2952926 | 0.2802075 | 0.2941435 | 0.493963 |
| 3 | apply+sum | 2.051954 | 2.0882605 | 2.4662292 | 2.1891690 | 2.3201845 | 20.648812 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 3.490178 | 3.450786 | 3.412315 | 3.400989 | 3.353897 | 3.269135 |
| 3 | apply+sum | 27.419344 | 26.588327 | 28.499021 | 26.570810 | 26.455320 | 136.657503 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.138607 | 0.1431090 | 0.1539760 | 0.1465505 | 0.155522 | 0.269581 |
| 2 | rowSums | 0.403481 | 0.4090745 | 0.4296506 | 0.4197245 | 0.431219 | 0.578216 |
| 3 | apply+sum | 2.033093 | 2.0965345 | 2.4730421 | 2.1712950 | 2.384572 | 20.292835 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowSums | 2.910971 | 2.858482 | 2.790374 | 2.864026 | 2.77272 | 2.144869 |
| 3 | apply+sum | 14.668040 | 14.649914 | 16.061222 | 14.816019 | 15.33270 | 75.275464 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+100x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | colCounts | 74.836 | 78.5405 | 86.53733 | 82.3900 | 87.702 | 151.099 |
| 2 | rowCounts | 138.607 | 143.1090 | 153.97596 | 146.5505 | 155.522 | 269.581 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000 | 1.000000 |
| 2 | rowCounts | 1.852143 | 1.822105 | 1.779301 | 1.778741 | 1.7733 | 1.784135 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.066060 | 0.0676605 | 0.0838680 | 0.0726380 | 0.0932175 | 0.191332 |
| 2 | colSums | 0.263842 | 0.2671160 | 0.3009194 | 0.2715075 | 0.3320570 | 0.465800 |
| 3 | apply+sum | 0.853779 | 0.8656770 | 1.0871991 | 0.8954545 | 1.1339550 | 8.654829 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 3.993975 | 3.947887 | 3.58801 | 3.737816 | 3.562174 | 2.434512 |
| 3 | apply+sum | 12.924296 | 12.794422 | 12.96321 | 12.327632 | 12.164615 | 45.234613 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.145008 | 0.1473055 | 0.1653688 | 0.1527485 | 0.1824495 | 0.265969 |
| 2 | rowSums | 0.504530 | 0.5072465 | 0.6229228 | 0.5130110 | 0.5530105 | 7.560175 |
| 3 | apply+sum | 0.857034 | 0.8712995 | 0.9813462 | 0.8922660 | 1.0690230 | 1.559909 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 3.479325 | 3.443500 | 3.766870 | 3.358534 | 3.031033 | 28.425023 |
| 3 | apply+sum | 5.910253 | 5.914915 | 5.934289 | 5.841406 | 5.859282 | 5.865003 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on integer+1000x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | colCounts | 66.060 | 67.6605 | 83.86805 | 72.6380 | 93.2175 | 191.332 |
| 2 | rowCounts | 145.008 | 147.3055 | 165.36878 | 152.7485 | 182.4495 | 265.969 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowCounts | 2.195095 | 2.177127 | 1.971773 | 2.102873 | 1.957245 | 1.390092 |
Figure: Benchmarking of colCounts() and rowCounts() on integer+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> rmatrix <- function(nrow, ncol, mode = c("logical", "double", "integer", "index"), range = c(-100,
+ +100), na_prob = 0) {
+ mode <- match.arg(mode)
+ n <- nrow * ncol
+ if (mode == "logical") {
+ x <- sample(c(FALSE, TRUE), size = n, replace = TRUE)
+ } else if (mode == "index") {
+ x <- seq_len(n)
+ mode <- "integer"
+ } else {
+ x <- runif(n, min = range[1], max = range[2])
+ }
+ storage.mode(x) <- mode
+ if (na_prob > 0)
+ x[sample(n, size = na_prob * n)] <- NA
+ dim(x) <- c(nrow, ncol)
+ x
+ }
> rmatrices <- function(scale = 10, seed = 1, ...) {
+ set.seed(seed)
+ data <- list()
+ data[[1]] <- rmatrix(nrow = scale * 1, ncol = scale * 1, ...)
+ data[[2]] <- rmatrix(nrow = scale * 10, ncol = scale * 10, ...)
+ data[[3]] <- rmatrix(nrow = scale * 100, ncol = scale * 1, ...)
+ data[[4]] <- t(data[[3]])
+ data[[5]] <- rmatrix(nrow = scale * 10, ncol = scale * 100, ...)
+ data[[6]] <- t(data[[5]])
+ names(data) <- sapply(data, FUN = function(x) paste(dim(x), collapse = "x"))
+ data
+ }
> data <- rmatrices(mode = mode)
> X <- data[["10x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 0.006350 | 0.0072695 | 0.0085632 | 0.0082510 | 0.0088780 | 0.021279 |
| 1 | colCounts | 0.007738 | 0.0085720 | 0.0100339 | 0.0094595 | 0.0103480 | 0.037644 |
| 3 | apply+sum | 0.042346 | 0.0442090 | 0.0473068 | 0.0449065 | 0.0460955 | 0.119980 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | colSums | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.218583 | 1.179173 | 1.171743 | 1.146467 | 1.165578 | 1.769068 |
| 3 | apply+sum | 6.668661 | 6.081436 | 5.524435 | 5.442552 | 5.192104 | 5.638423 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.006733 | 0.0074745 | 0.0087072 | 0.0088385 | 0.0091630 | 0.033580 |
| 2 | rowSums | 0.007404 | 0.0080240 | 0.0089398 | 0.0088565 | 0.0094105 | 0.019765 |
| 3 | apply+sum | 0.042170 | 0.0435875 | 0.0458676 | 0.0442790 | 0.0449420 | 0.167430 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowSums | 1.099658 | 1.073517 | 1.026719 | 1.002036 | 1.027011 | 0.5885944 |
| 3 | apply+sum | 6.263181 | 5.831494 | 5.267778 | 5.009787 | 4.904725 | 4.9860036 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+10x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 6.733 | 7.4745 | 8.70720 | 8.8385 | 9.163 | 33.580 |
| 1 | colCounts | 7.738 | 8.5720 | 10.03387 | 9.4595 | 10.348 | 37.644 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.149265 | 1.146833 | 1.152365 | 1.070261 | 1.129325 | 1.121024 |
Figure: Benchmarking of colCounts() and rowCounts() on double+10x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.019315 | 0.0216215 | 0.0248835 | 0.0229120 | 0.0264315 | 0.068351 |
| 2 | colSums | 0.035221 | 0.0370065 | 0.0418328 | 0.0406325 | 0.0451275 | 0.061254 |
| 3 | apply+sum | 0.274895 | 0.2825740 | 0.3177964 | 0.2952570 | 0.3340440 | 0.477387 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | colSums | 1.823505 | 1.71156 | 1.681148 | 1.773416 | 1.707338 | 0.8961683 |
| 3 | apply+sum | 14.232203 | 13.06912 | 12.771369 | 12.886566 | 12.638102 | 6.9843455 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.018674 | 0.0212115 | 0.0234508 | 0.0222250 | 0.0250200 | 0.050941 |
| 2 | rowSums | 0.061601 | 0.0656455 | 0.0717409 | 0.0687150 | 0.0769245 | 0.097380 |
| 3 | apply+sum | 0.260498 | 0.2779735 | 0.3063011 | 0.2888495 | 0.3302950 | 0.503861 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.00000 | 1.000000 |
| 2 | rowSums | 3.298758 | 3.094807 | 3.059209 | 3.091788 | 3.07452 | 1.911623 |
| 3 | apply+sum | 13.949770 | 13.104849 | 13.061436 | 12.996603 | 13.20124 | 9.891070 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+100x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on double+100x100 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 18.674 | 21.2115 | 23.4508 | 22.225 | 25.0200 | 50.941 |
| 1 | colCounts | 19.315 | 21.6215 | 24.8835 | 22.912 | 26.4315 | 68.351 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.034326 | 1.019329 | 1.061094 | 1.030911 | 1.056415 | 1.341768 |
Figure: Benchmarking of colCounts() and rowCounts() on double+100x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x10"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.019521 | 0.0220475 | 0.0249289 | 0.0239215 | 0.0258260 | 0.074930 |
| 2 | colSums | 0.036529 | 0.0398005 | 0.0452394 | 0.0427700 | 0.0461280 | 0.142064 |
| 3 | apply+sum | 0.134231 | 0.1436985 | 0.1600036 | 0.1560095 | 0.1688235 | 0.299705 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 1.871267 | 1.805216 | 1.814739 | 1.787931 | 1.786107 | 1.895956 |
| 3 | apply+sum | 6.876236 | 6.517678 | 6.418408 | 6.521727 | 6.536959 | 3.999800 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.019320 | 0.0218085 | 0.0263440 | 0.0251540 | 0.026535 | 0.071538 |
| 3 | apply+sum | 0.129371 | 0.1352715 | 0.1611321 | 0.1422125 | 0.168951 | 0.362152 |
| 2 | rowSums | 0.190320 | 0.1977460 | 0.2210332 | 0.2114500 | 0.246531 | 0.301963 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 3 | apply+sum | 6.696222 | 6.202696 | 6.116461 | 5.653673 | 6.367100 | 5.062372 |
| 2 | rowSums | 9.850932 | 9.067382 | 8.390265 | 8.406218 | 9.290786 | 4.221015 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+1000x10 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on double+1000x10 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 19.521 | 22.0475 | 24.92886 | 23.9215 | 25.826 | 74.930 |
| 2 | rowCounts | 19.320 | 21.8085 | 26.34401 | 25.1540 | 26.535 | 71.538 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.0000000 |
| 2 | rowCounts | 0.9897034 | 0.9891598 | 1.056768 | 1.051523 | 1.027453 | 0.9547311 |
Figure: Benchmarking of colCounts() and rowCounts() on double+1000x10 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["10x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.016777 | 0.0189145 | 0.0248176 | 0.0221425 | 0.026590 | 0.074802 |
| 2 | colSums | 0.027659 | 0.0317780 | 0.0377182 | 0.0353500 | 0.038784 | 0.092343 |
| 3 | apply+sum | 1.287584 | 1.4017560 | 1.5128844 | 1.4757060 | 1.573189 | 2.590975 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 1.648626 | 1.680087 | 1.519816 | 1.596477 | 1.458594 | 1.234499 |
| 3 | apply+sum | 76.746975 | 74.110127 | 60.960066 | 66.645862 | 59.164686 | 34.637777 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.015787 | 0.0190205 | 0.0224049 | 0.0207755 | 0.023704 | 0.065639 |
| 2 | rowSums | 0.042511 | 0.0468050 | 0.0519133 | 0.0489985 | 0.054957 | 0.092636 |
| 3 | apply+sum | 1.295856 | 1.3844675 | 1.4861423 | 1.4685930 | 1.555566 | 1.830412 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 2.692785 | 2.460766 | 2.317049 | 2.358475 | 2.318469 | 1.411295 |
| 3 | apply+sum | 82.083740 | 72.788176 | 66.331071 | 70.688696 | 65.624620 | 27.886043 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+10x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | rowCounts | 15.787 | 19.0205 | 22.40492 | 20.7755 | 23.704 | 65.639 |
| 1 | colCounts | 16.777 | 18.9145 | 24.81763 | 22.1425 | 26.590 | 74.802 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.00000 | 1.0000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 1 | colCounts | 1.06271 | 0.9944271 | 1.107687 | 1.065799 | 1.121752 | 1.139597 |
Figure: Benchmarking of colCounts() and rowCounts() on double+10x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["100x1000"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.106208 | 0.110792 | 0.1249620 | 0.1196105 | 0.1286505 | 0.211605 |
| 2 | colSums | 0.234996 | 0.244717 | 0.2731302 | 0.2557090 | 0.2808200 | 0.488140 |
| 3 | apply+sum | 2.017583 | 2.098267 | 2.5172652 | 2.1463755 | 2.5706040 | 20.252990 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 2.212602 | 2.208797 | 2.185705 | 2.137847 | 2.182813 | 2.306845 |
| 3 | apply+sum | 18.996526 | 18.938795 | 20.144237 | 17.944708 | 19.981298 | 95.711302 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.111257 | 0.120393 | 0.1369497 | 0.1331260 | 0.1457465 | 0.240432 |
| 2 | rowSums | 0.378523 | 0.400822 | 0.4221277 | 0.4146545 | 0.4305350 | 0.587751 |
| 3 | apply+sum | 2.064423 | 2.199650 | 2.5900267 | 2.2840775 | 2.5770720 | 19.405890 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.00000 | 1.00000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 3.40224 | 3.32928 | 3.082356 | 3.114752 | 2.953999 | 2.444562 |
| 3 | apply+sum | 18.55544 | 18.27058 | 18.912250 | 17.157261 | 17.681879 | 80.712592 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+100x1000 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() on double+100x1000 data (original and transposed). The top panel shows times in milliseconds and the bottom panel shows relative times.
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 106.208 | 110.792 | 124.9621 | 119.6105 | 128.6505 | 211.605 |
| 2 | rowCounts | 111.257 | 120.393 | 136.9497 | 133.1260 | 145.7465 | 240.432 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.00000 | 1.000000 | 1.000000 | 1.00000 |
| 2 | rowCounts | 1.047539 | 1.086658 | 1.09593 | 1.112996 | 1.132887 | 1.13623 |
Figure: Benchmarking of colCounts() and rowCounts() on double+100x1000 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

> X <- data[["1000x100"]]
> value <- 42
> colStats <- microbenchmark(colCounts = colCounts(X, value = value, na.rm = FALSE), colSums = colSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 2L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
> X <- t(X)
> rowStats <- microbenchmark(rowCounts = rowCounts(X, value = value, na.rm = FALSE), rowSums = rowSums(X ==
+ value, na.rm = FALSE), `apply+sum` = apply(X, MARGIN = 1L, FUN = function(x) sum(x == value,
+ na.rm = FALSE)), unit = "ms")
Table: Benchmarking of colCounts(), colSums() and apply+sum() 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 | colCounts | 0.100316 | 0.1228340 | 0.1337999 | 0.1307415 | 0.144953 | 0.219630 |
| 2 | colSums | 0.239877 | 0.2684070 | 0.3544476 | 0.2955835 | 0.316224 | 6.538396 |
| 3 | apply+sum | 0.869230 | 0.9984675 | 1.0835718 | 1.1017920 | 1.132891 | 1.663588 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | colCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | colSums | 2.391214 | 2.185120 | 2.649087 | 2.260824 | 2.181562 | 29.770050 |
| 3 | apply+sum | 8.664919 | 8.128592 | 8.098448 | 8.427255 | 7.815571 | 7.574503 |
Table: Benchmarking of rowCounts(), rowSums() and apply+sum() 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 | rowCounts | 0.117644 | 0.1241655 | 0.1348207 | 0.1272840 | 0.1397885 | 0.225083 |
| 2 | rowSums | 0.478986 | 0.4848400 | 0.5212520 | 0.5029105 | 0.5274120 | 0.733624 |
| 3 | apply+sum | 0.880771 | 0.9132125 | 1.0615535 | 0.9532880 | 1.0444710 | 7.144646 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 1 | rowCounts | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 1.000000 |
| 2 | rowSums | 4.071487 | 3.904788 | 3.866261 | 3.951090 | 3.772928 | 3.259349 |
| 3 | apply+sum | 7.486748 | 7.354801 | 7.873817 | 7.489457 | 7.471795 | 31.742273 |
Figure: Benchmarking of colCounts(), colSums() and apply+sum() on double+1000x100 data as well as rowCounts(), rowSums() and apply+sum() on the same data transposed. Outliers are displayed as crosses. Times are in milliseconds.

Table: Benchmarking of colCounts() and rowCounts() 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 | rowCounts | 117.644 | 124.1655 | 134.8207 | 127.2840 | 139.7885 | 225.083 |
| 1 | colCounts | 100.316 | 122.8340 | 133.7999 | 130.7415 | 144.9530 | 219.630 |
| expr | min | lq | mean | median | uq | max | |
|---|---|---|---|---|---|---|---|
| 2 | rowCounts | 1.0000000 | 1.0000000 | 1.0000000 | 1.000000 | 1.000000 | 1.0000000 |
| 1 | colCounts | 0.8527082 | 0.9892764 | 0.9924287 | 1.027164 | 1.036945 | 0.9757734 |
Figure: Benchmarking of colCounts() and rowCounts() on double+1000x100 data (original and transposed). Outliers are displayed as crosses. Times are in milliseconds.

R version 4.1.1 Patched (2021-08-10 r80727)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRblas.so
LAPACK: /home/hb/software/R-devel/R-4-1-branch/lib/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] microbenchmark_1.4-7 matrixStats_0.60.0 ggplot2_3.3.5
[4] knitr_1.33 R.devices_2.17.0 R.utils_2.10.1
[7] R.oo_1.24.0 R.methodsS3_1.8.1-9001 history_0.0.1-9000
loaded via a namespace (and not attached):
[1] Biobase_2.52.0 httr_1.4.2 splines_4.1.1
[4] bit64_4.0.5 network_1.17.1 assertthat_0.2.1
[7] highr_0.9 stats4_4.1.1 blob_1.2.2
[10] GenomeInfoDbData_1.2.6 robustbase_0.93-8 pillar_1.6.2
[13] RSQLite_2.2.8 lattice_0.20-44 glue_1.4.2
[16] digest_0.6.27 XVector_0.32.0 colorspace_2.0-2
[19] Matrix_1.3-4 XML_3.99-0.7 pkgconfig_2.0.3
[22] zlibbioc_1.38.0 genefilter_1.74.0 purrr_0.3.4
[25] ergm_4.1.2 xtable_1.8-4 scales_1.1.1
[28] tibble_3.1.4 annotate_1.70.0 KEGGREST_1.32.0
[31] farver_2.1.0 generics_0.1.0 IRanges_2.26.0
[34] ellipsis_0.3.2 cachem_1.0.6 withr_2.4.2
[37] BiocGenerics_0.38.0 mime_0.11 survival_3.2-13
[40] magrittr_2.0.1 crayon_1.4.1 statnet.common_4.5.0
[43] memoise_2.0.0 laeken_0.5.1 fansi_0.5.0
[46] R.cache_0.15.0 MASS_7.3-54 R.rsp_0.44.0
[49] progressr_0.8.0 tools_4.1.1 lifecycle_1.0.0
[52] S4Vectors_0.30.0 trust_0.1-8 munsell_0.5.0
[55] tabby_0.0.1-9001 AnnotationDbi_1.54.1 Biostrings_2.60.2
[58] compiler_4.1.1 GenomeInfoDb_1.28.1 rlang_0.4.11
[61] grid_4.1.1 RCurl_1.98-1.4 cwhmisc_6.6
[64] rstudioapi_0.13 rappdirs_0.3.3 startup_0.15.0
[67] labeling_0.4.2 bitops_1.0-7 base64enc_0.1-3
[70] boot_1.3-28 gtable_0.3.0 DBI_1.1.1
[73] markdown_1.1 R6_2.5.1 lpSolveAPI_5.5.2.0-17.7
[76] rle_0.9.2 dplyr_1.0.7 fastmap_1.1.0
[79] bit_4.0.4 utf8_1.2.2 parallel_4.1.1
[82] Rcpp_1.0.7 vctrs_0.3.8 png_0.1-7
[85] DEoptimR_1.0-9 tidyselect_1.1.1 xfun_0.25
[88] coda_0.19-4
Total processing time was 38.03 secs.
To reproduce this report, do:
html <- matrixStats:::benchmark('colCounts')
Copyright Henrik Bengtsson. Last updated on 2021-08-25 22:12:40 (+0200 UTC). Powered by RSP.