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!