The cache package provides a simple interface to
caching which works across interactive R sessions, R scripts and
Rmarkdown documents. Simply wrap your R expressions with the
cache()
function to cache or retrieve the results:
cache(resultOf = longComputation())
You can install the released version of cache from CRAN with:
install.packages("cache")
and the development version from GitHub with:
if (!require(devtools)) install.packages("devtools")
::install_github("OlivierBinette/cache") devtools
Wrap any R expression using the cache()
function to
cache the result:
library(cache)
cache(myComputation = {Sys.sleep(3); "Hello World"})
The variable named myComputation
contains the result of
the computation and is available in your environment:
print(myComputation)
#> [1] "Hello World"
While it takes 3 seconds to evaluate the expression
{Sys.sleep(3); "Hello World"}
, the previously cached result
can be instantly retrieved using the same function call:
system.time(
cache(myComputation = {Sys.sleep(3); "Hello World"})
)#> user system elapsed
#> 0.001 0.000 0.002
print(myComputation)
#> [1] "Hello World"
This is especially useful as part of a reproducible analysis workflow
or as part of an Rmarkdown document. However, in constrast with the
cache functionality of the rmarkdown
package, the
cache package can be used seamlessly across interactive
sessions, reproducible analyses and Rmarkdown knitting.
No two objects of the same name can be placed in the same cache
directory. Analysis-specific cache directory should therefore be used
when conflicts are expected. We recommend using the here()
function from the here
package to specify cache file paths relatively to the project root:
cache(.cachedir = here::here(".cache-R/cars-analysis"),
result = lm(cars)
)
Use the .rerun
argument to clear cache and rerun
expressions:
cache(.rerun=TRUE,
myComputation = {Sys.sleep(3); "Hello World"}
)
Cached objects can also be loaded directly using the
cache_load()
function:
# Load all cached objects from the `.cache-R` directory
cache_load()
#> ℹ Reading the following objects from cache: myComputation
# Load specific object
cache_load("myComputation")
#> ℹ Reading the following objects from cache: myComputation
By default, the cache directory is located under a
./cache-R
folder created at the root of your project
directory. This folder is located using the here::here()
function to ensure that all project files and documents can locate it as
needed.
To clear the cache and rerun all expressions, either delete the
.cache-R
folder or supply the argument
.rerun = FALSE
to the cache()
function
calls.