f <- function(x) Sys.sleep(x)
# takes 3 seconds always
system.time(f(3))
#> user system elapsed
#> 0.000 0.000 3.003
system.time(f(3))
#> user system elapsed
#> 0.017 0.003 3.021
fm <- memoise::memoise(f)
# takes 3 seconds only the first time
system.time(fm(3))
#> user system elapsed
#> 0.001 0.001 3.004
# subsequent calls take virtually no time
system.time(fm(3))
#> user system elapsed
#> 0.028 0.000 0.029
Created on 2024-06-06 with reprex v2.1.0