memoise::memoise

Caching computations: avoid repeated computations!

slow_function <- function(x) {
  Sys.sleep(1)
  x * 10 * runif(1)
}
system.time(print(slow_function(1)))
#> [1] 9.458588
#>    user  system elapsed 
#>   0.000   0.000   1.001
system.time(print(slow_function(1)))
#> [1] 0.4776598
#>    user  system elapsed 
#>   0.003   0.000   1.003
fast_function <- memoise::memoise(slow_function)
system.time(print(fast_function(1)))
#> [1] 5.516121
#>    user  system elapsed 
#>   0.001   0.000   1.002
system.time(print(fast_function(1)))
#> [1] 5.516121
#>    user  system elapsed 
#>   0.016   0.000   0.016

Be careful about memoising impure functions!