diff --git a/NAMESPACE b/NAMESPACE index ee1b019..40d1941 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,7 @@ # Generated by roxygen2 (4.0.0): do not edit by hand export(forget) +export(has.cache) export(is.memoised) export(is.memoized) export(memoise) diff --git a/R/memoise.r b/R/memoise.r index c972745..6a8e138 100644 --- a/R/memoise.r +++ b/R/memoise.r @@ -138,3 +138,24 @@ forget <- function(f) { is.memoised <- is.memoized <- function(f) { identical(attr(f, "memoised"), TRUE) } + +#' Test whether a memoised function has been cached for particular arguments. +#' @param f Function to test. +#' @param ... arguments to function. +#' @seealso \code{\link{is.memoised}}, \code{\link{memoise}} +#' @export has.cache +#' @examples +#' mem_sum <- memoise(sum) +#' has.cache( mem_sum, 1, 2, 3) # FALSE +#' mem_sum(1, 2, 3) +#' has.cache( mem_sum, 1, 2, 3) # TRUE +has.cache <- function(f, ...) { + if(!is.memoised(f)) return(FALSE) + + hash <- digest(list(...)) + env <- environment(f) + if (!exists("cache", env, inherits = FALSE)) return(FALSE) + cache <- get("cache", env) + + cache$has_key(hash) +} diff --git a/man/has.cache.Rd b/man/has.cache.Rd new file mode 100644 index 0000000..b376856 --- /dev/null +++ b/man/has.cache.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/memoise.r +\name{has.cache} +\alias{has.cache} +\title{Test whether a memoised function has been cached for particular arguments.} +\usage{ +has.cache(f, ...) +} +\arguments{ +\item{f}{Function to test.} + +\item{...}{arguments to function.} +} +\description{ +Test whether a memoised function has been cached for particular arguments. +} +\examples{ +mem_sum <- memoise(sum) +has.cache( mem_sum, 1, 2, 3) # FALSE +mem_sum(1, 2, 3) +has.cache( mem_sum, 1, 2, 3) # TRUE +} +\seealso{ +\code{\link{is.memoised}}, \code{\link{memoise}} +} +