diff --git a/NAMESPACE b/NAMESPACE index 1736c94..1b19389 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,7 @@ # Generated by roxygen2: do not edit by hand S3method(print,memoised) +export(cache) export(cache_filesystem) export(cache_memory) export(cache_s3) diff --git a/R/cache.R b/R/cache.R new file mode 100644 index 0000000..f70a585 --- /dev/null +++ b/R/cache.R @@ -0,0 +1,18 @@ +#' @export +cache <- function(code, ..., envir = parent.frame(), cache = cache_memory()) { + expr <- substitute(code) + key <- cache$digest(c(expr, lapply(list(...), function(x) eval(x[[2L]], environment(x))))) + if (cache$has_key(key)) { + res <- cache$get(key) + if (res$visible) { + res$value + } else { + invisible(res$value) + } + } else { + f <- function() NULL + body(f) <- expr + environment(f) <- envir + cache$set(key, f()) + } +}