2021-10-20 15:34:52 +02:00
|
|
|
# Run a function caching the result on the file system.
|
|
|
|
|
#
|
|
|
|
|
# The function will be called with the appended arguments. The [`id`] argument
|
|
|
|
|
# will be used to identify the cache file on the file system and in log
|
|
|
|
|
# messages.
|
2021-08-25 11:59:27 +02:00
|
|
|
run_cached <- function(id, func, ...) {
|
|
|
|
|
if (!dir.exists("cache")) {
|
|
|
|
|
dir.create("cache")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cache_file <- paste("cache/", id, ".rds", sep = "")
|
|
|
|
|
|
|
|
|
|
if (file.exists(cache_file)) {
|
|
|
|
|
# If the cache file exists, we restore the data from it.
|
|
|
|
|
readRDS(cache_file)
|
|
|
|
|
} else {
|
|
|
|
|
# If the cache file doesn't exist, we have to do the computation.
|
|
|
|
|
data <- func(...)
|
|
|
|
|
|
|
|
|
|
# The results are cached for the next run.
|
|
|
|
|
saveRDS(data, cache_file)
|
|
|
|
|
|
|
|
|
|
data
|
|
|
|
|
}
|
2021-10-19 14:15:28 +02:00
|
|
|
}
|
2021-10-20 15:34:52 +02:00
|
|
|
|
|
|
|
|
# This is needed to make data.table's and shiny's symbols available within the
|
|
|
|
|
# package.
|
|
|
|
|
#' @import data.table
|
|
|
|
|
#' @import shiny
|
|
|
|
|
NULL
|