24.5 Avoiding Method Dispatch

x <- runif(1e2)
bench::mark(
  mean(x),
  mean.default(x)
)[c("expression", "min", "median", "itr/sec", "n_gc")]
#> # A tibble: 2 × 4
#>   expression           min   median `itr/sec`
#>   <bch:expr>      <bch:tm> <bch:tm>     <dbl>
#> 1 mean(x)              3µs   3.17µs   298864.
#> 2 mean.default(x)   1.84µs   1.98µs   426539.
x <- runif(1e2)
bench::mark(
  mean(x),
  mean.default(x),
  .Internal(mean(x))
)[c("expression", "min", "median", "itr/sec", "n_gc")]
#> # A tibble: 3 × 4
#>   expression              min   median `itr/sec`
#>   <bch:expr>         <bch:tm> <bch:tm>     <dbl>
#> 1 mean(x)              3.01µs   3.23µs   301586.
#> 2 mean.default(x)      1.83µs   1.91µs   496097.
#> 3 .Internal(mean(x)) 481.03ns 501.05ns  1966323.
x <- runif(1e4)
bench::mark(
  mean(x),
  mean.default(x),
  .Internal(mean(x))
)[c("expression", "min", "median", "itr/sec", "n_gc")]
#> # A tibble: 3 × 4
#>   expression              min   median `itr/sec`
#>   <bch:expr>         <bch:tm> <bch:tm>     <dbl>
#> 1 mean(x)              42.4µs     46µs    21506.
#> 2 mean.default(x)      39.8µs   44.7µs    22133.
#> 3 .Internal(mean(x))   37.3µs   43.3µs    22972.