Skip to contents

Compute quantiles

Usage

fast_quantile(x, prob = 0.5, na.rm = FALSE, ...)

fast_median(x, na.rm = FALSE, ...)

fast_mvquantile(x, prob = 0.5, na.rm = FALSE, ...)

fast_mvmedian(x, na.rm = FALSE, ...)

Arguments

x

numerical-value vector for fast_quantile and fast_median, and column-major matrix for fast_mvquantile and fast_mvmedian

prob

a probability with value from 0 to 1

na.rm

logical; if true, any NA are removed from x before the quantiles are computed

...

reserved for future use

Value

fast_quantile and fast_median calculate univariate quantiles (single-value return); fast_mvquantile and fast_mvmedian calculate multivariate quantiles (for each column, result lengths equal to the number of columns).

Examples


fast_quantile(runif(1000), 0.1)
#> [1] 0.08925259
fast_median(1:100)
#> [1] 50.5

x <- matrix(rnorm(100), ncol = 2)
fast_mvquantile(x, 0.2)
#> [1] -0.9291953 -1.0147020
fast_mvmedian(x)
#> [1] -0.01031475 -0.03301562

# Compare speed for vectors (usually 30% faster)
x <- rnorm(10000)
microbenchmark::microbenchmark(
  fast_median = fast_median(x),
  base_median = median(x),
  # bioc_median = Biobase::rowMedians(matrix(x, nrow = 1)),
  times = 100, unit = "milliseconds"
)
#> Unit: milliseconds
#>         expr      min        lq      mean    median        uq      max neval
#>  fast_median 0.078276 0.1196085 0.1309507 0.1347660 0.1449095 0.185877   100
#>  base_median 0.162022 0.1735680 0.1829872 0.1813625 0.1881360 0.271346   100

# Multivariate cases
# (5~7x faster than base R)
# (3~5x faster than Biobase rowMedians)
x <- matrix(rnorm(100000), ncol = 20)
microbenchmark::microbenchmark(
  fast_median = fast_mvmedian(x),
  base_median = apply(x, 2, median),
  # bioc_median = Biobase::rowMedians(t(x)),
  times = 10, unit = "milliseconds"
)
#> Unit: milliseconds
#>         expr      min       lq      mean   median       uq      max neval
#>  fast_median 0.660190 0.685738 0.7452996 0.726944 0.737014 1.053423    10
#>  base_median 2.674792 2.743079 2.7693537 2.763683 2.801048 2.916573    10