n_times <- 2
create_vec <- function(n_times) rep(as.character(1:4), each = n_times)
example_vec <- create_vec(n_times)
example_vec
#> [1] "1" "1" "2" "2" "3" "3" "4" "4"
example_lookup <- as.character(c(2, 4, 1, 3)) |>
setNames(1:4)
example_lookup
#> 1 2 3 4
#> "2" "4" "1" "3"
example_vec2 <- dplyr::case_when(
example_vec == "1" ~ "2", # paper yes (1) = Online yes (2)
example_vec == "2" ~ "4", # paper unsure (2) = Online unsure (4)
example_vec == "3" ~ "1", # paper no (3) = Online no (1)
example_vec == "4" ~ "3", # paper don't have (4) = online don't have (3)
.default = example_vec
)
example_vec2
#> [1] "2" "2" "4" "4" "1" "1" "3" "3"
example_lookup[example_vec]
#> 1 1 2 2 3 3 4 4
#> "2" "2" "4" "4" "1" "1" "3" "3"
unname(example_lookup[example_vec])
#> [1] "2" "2" "4" "4" "1" "1" "3" "3"
bm <- bench::mark(
case = dplyr::case_when(
example_vec == "1" ~ "2", # paper yes (1) = Online yes (2)
example_vec == "2" ~ "4", # paper unsure (2) = Online unsure (4)
example_vec == "3" ~ "1", # paper no (3) = Online no (1)
example_vec == "4" ~ "3", # paper don't have (4) = online don't have (3)
.default = example_vec
),
lookup = unname(example_lookup[example_vec])
)
bm
#> # A tibble: 2 × 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 case 85.5µs 90.1µs 10968. 1.3KB 43.9
#> 2 lookup 615ns 778.9ns 1279803. 0B 0
summary(bm, relative = TRUE)
#> # A tibble: 2 × 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 case 139. 116. 1 Inf Inf
#> 2 lookup 1 1 117. NaN NaN
# comparing over N size
bp <- bench::press(
n_times = c(2, 20, 200, 2000, 20000, 200000),
{
dat <- create_vec(n_times)
bench::mark(
case = dplyr::case_when(
dat == "1" ~ "2", # paper yes (1) = Online yes (2)
dat == "2" ~ "4", # paper unsure (2) = Online unsure (4)
dat == "3" ~ "1", # paper no (3) = Online no (1)
dat == "4" ~ "3", # paper don't have (4) = online don't have (3)
.default = dat
),
lookup = unname(example_lookup[dat])
)
}
)
#> Running with:
#> n_times
#> 1 2
#> 2 20
#> 3 200
#> 4 2000
#> 5 20000
#> 6 200000
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.
library(bench)
bp
#> # A tibble: 12 × 7
#> expression n_times min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <dbl> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 case 2 88.81µs 93.69µs 9911. 1.3KB 46.3
#> 2 lookup 2 656ns 778.93ns 1268942. 0B 127.
#> 3 case 20 91.72µs 98.44µs 10084. 10.18KB 48.7
#> 4 lookup 20 1.68µs 1.93µs 483353. 2.38KB 0
#> 5 case 200 117.75µs 124.46µs 7911. 83.81KB 38.5
#> 6 lookup 200 11.07µs 12.79µs 78010. 22.06KB 31.2
#> 7 case 2000 349.24µs 384.64µs 2581. 815.05KB 42.7
#> 8 lookup 2000 103.32µs 119.72µs 8367. 218.94KB 36.5
#> 9 case 20000 2.76ms 3.06ms 303. 7.94MB 104.
#> 10 lookup 20000 1.03ms 1.2ms 831. 2.14MB 40.2
#> 11 case 200000 33.76ms 35ms 24.9 79.35MB 51.8
#> 12 lookup 200000 11.61ms 13.55ms 75.3 21.36MB 39.6
plot(bp)summary(bp, relative = TRUE)
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.
#> # A tibble: 12 × 7
#> expression n_times min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 case 2 135. 120. 379. Inf Inf
#> 2 lookup 2 1 1 46807. NaN Inf
#> 3 case 20 140. 126. 384. Inf Inf
#> 4 lookup 20 2.56 2.47 19379. Inf NaN
#> 5 case 200 180. 160. 298. Inf Inf
#> 6 lookup 200 16.9 16.4 2897. Inf Inf
#> 7 case 2000 532. 494. 93.6 Inf Inf
#> 8 lookup 2000 157. 154. 314. Inf Inf
#> 9 case 20000 4214. 3996. 10.9 Inf Inf
#> 10 lookup 20000 1578. 1539. 31.2 Inf Inf
#> 11 case 200000 51458. 44929. 1 Inf Inf
#> 12 lookup 200000 17700. 17394. 3.02 Inf InfCreated on 2025-07-07 with reprex v2.1.1
Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.5.1 (2025-06-13)
#> os macOS Sonoma 14.5
#> system aarch64, darwin20
#> ui X11
#> language (EN)
#> collate en_AU.UTF-8
#> ctype en_AU.UTF-8
#> tz Australia/Hobart
#> date 2025-07-07
#> pandoc 3.6.3 @ /Applications/Positron.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
#> quarto 1.7.31 @ /usr/local/bin/quarto
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> beeswarm 0.4.0 2021-06-01 [1] CRAN (R 4.5.0)
#> bench * 1.1.4 2025-01-16 [1] CRAN (R 4.5.0)
#> cli 3.6.5 2025-04-23 [1] CRAN (R 4.5.0)
#> curl 6.2.2 2025-03-24 [1] CRAN (R 4.5.0)
#> digest 0.6.37 2024-08-19 [1] CRAN (R 4.5.0)
#> dplyr 1.1.4 2023-11-17 [1] CRAN (R 4.5.0)
#> evaluate 1.0.4 2025-06-18 [1] CRAN (R 4.5.0)
#> farver 2.1.2 2024-05-13 [1] CRAN (R 4.5.0)
#> fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.5.0)
#> fs 1.6.6 2025-04-12 [1] CRAN (R 4.5.0)
#> generics 0.1.4 2025-05-09 [1] CRAN (R 4.5.0)
#> ggbeeswarm 0.7.2 2023-04-29 [1] CRAN (R 4.5.0)
#> ggplot2 3.5.2 2025-04-09 [1] CRAN (R 4.5.0)
#> glue 1.8.0 2024-09-30 [1] CRAN (R 4.5.0)
#> gtable 0.3.6 2024-10-25 [1] CRAN (R 4.5.0)
#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.5.0)
#> knitr 1.50 2025-03-16 [1] CRAN (R 4.5.0)
#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.5.0)
#> magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.5.0)
#> pillar 1.10.2 2025-04-05 [1] CRAN (R 4.5.0)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.5.0)
#> profmem 0.6.0 2020-12-13 [1] CRAN (R 4.5.0)
#> purrr 1.0.4.9000 2025-05-04 [1] Github (tidyverse/purrr@9c8beb4)
#> R6 2.6.1 2025-02-15 [1] CRAN (R 4.5.0)
#> RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.5.0)
#> reprex 2.1.1 2024-07-06 [1] CRAN (R 4.5.0)
#> rlang 1.1.6 2025-04-11 [1] CRAN (R 4.5.0)
#> rmarkdown 2.29 2024-11-04 [1] CRAN (R 4.5.0)
#> scales 1.4.0 2025-04-24 [1] CRAN (R 4.5.0)
#> sessioninfo 1.2.3 2025-02-05 [1] CRAN (R 4.5.0)
#> tibble 3.3.0 2025-06-08 [1] CRAN (R 4.5.0)
#> tidyr 1.3.1 2024-01-24 [1] CRAN (R 4.5.0)
#> tidyselect 1.2.1 2024-03-11 [1] CRAN (R 4.5.0)
#> utf8 1.2.6 2025-06-08 [1] CRAN (R 4.5.0)
#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.5.0)
#> vipor 0.4.7 2023-12-18 [1] CRAN (R 4.5.0)
#> withr 3.0.2 2024-10-28 [1] CRAN (R 4.5.0)
#> xfun 0.52 2025-04-02 [1] CRAN (R 4.5.0)
#> xml2 1.3.8 2025-03-14 [1] CRAN (R 4.5.0)
#> yaml 2.3.10 2024-07-26 [1] CRAN (R 4.5.0)
#>
#> [1] /Users/nick_1/Library/R/arm64/4.5/library
#> [2] /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/library
#> * ── Packages attached to the search path.
#>
#> ──────────────────────────────────────────────────────────────────────────────