Biobase (version 2.30.0)

cache: Evaluate an expression if its value is not already cached.

Description

Cache the evaluation of an expression in the file system.

Usage

cache(expr, dir=".", prefix="tmp_R_cache_")

Arguments

expr
An expression of the form LHS <- RHS, Where LHS is a variable name, RHS is any valid expression, and <- must be used (= will not work).
dir
A string specifying the directory into which cache files should be written (also where to go searching for an appropriate cache file).
prefix
A string giving the prefix to use when naming and searching for cache files. The default is "tmp_R_cache_"

Value

The (cached) value of expr.

Note

The first version of this function had a slightly different interface which is no longer functional. The old version has arguments name and expr and the intended usage is: foo <- cache("foo", expr).

Details

This function can be useful during the development of computationally intensive workflows, for example in vignettes or scripts. The function uses a cache file in dir which defaults to the current working directory whose name is obtained by paste(prefix, name, ".RData", sep=""). When cache is called and the cache file exists, it is loaded and the object whose name is given on the left of <- in expr is returned. In this case, expr is not evaluted.

When cache is called and the cache file does not exist, expr is evaluted, its value is saved into a cache file, and then its value is returned.

The expr argument must be of the form of someVar <- {expressions}. That is, the left hand side must be a single symbol name and the next syntactic token must be <-. To flush the cache and force recomputation, simply remove the cache files. You can use file.remove to do this.

Examples

Run this code
    bigCalc <- function() runif(10)
    cache(myComplicatedObject <- bigCalc())
    aCopy <- myComplicatedObject
    remove(myComplicatedObject)
    cache(myComplicatedObject <- bigCalc())
    stopifnot(all.equal(myComplicatedObject, aCopy))
    allCacheFiles <-
       list.files(".", pattern="^tmp_R_cache_.*\\.RData$", full.name=TRUE)
    file.remove(allCacheFiles)

Run the code above in your browser using DataLab