From 7b1c1c60a094cb4cb5c2832cd588a67b2020fc94 Mon Sep 17 00:00:00 2001 From: Bryce Mecum Date: Wed, 3 Nov 2021 16:32:59 -0800 Subject: [PATCH] Cache calls to units::valid_udunits_prefixes() This fixes a performance issue with the entire shiny_attributes app reported in ropensci#332. --- R/get_unit_id.R | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/R/get_unit_id.R b/R/get_unit_id.R index bcc9568..9f436e2 100644 --- a/R/get_unit_id.R +++ b/R/get_unit_id.R @@ -174,6 +174,20 @@ format_split_unit <- function(split_unit, return(f_split_unit) } +# Cache calls to units::valid_udunits_prefixes()$symbol +valid_udunits_prefixes_cache <- new.env(parent = emptyenv()) + +get_udunits_prefix_symbols <- function() { + if (is.null(valid_udunits_prefixes_cache$symbol)) { + valid_udunits_prefixes_cache$symbol <- + suppressMessages({ + units::valid_udunits_prefixes()$symbol + }) + } + + valid_udunits_prefixes_cache$symbol +} + get_split_unit <- function(unit, exponents) { if (is.na(unit)) { unit <- "" @@ -187,7 +201,7 @@ get_split_unit <- function(unit, exponents) { unit <- gsub( paste0( "([^[:alpha:]]|^)(", - paste(suppressMessages(units::valid_udunits_prefixes()$symbol), collapse = "|"), + paste(get_udunits_prefix_symbols(), collapse = "|"), ")( )([[:upper:]])" ), "\\1\\2\\4",