View source: R/evalWithMemoization.R
evalWithMemoization | R Documentation |
Evaluates an R expression with memoization such that the same objects are assigned to the current environment and the same result is returned, if any.
evalWithMemoization(expr, key=NULL, ..., envir=parent.frame(), drop=c("srcref", "srcfile", "wholeSrcref"), force=FALSE)
expr |
The |
key |
Additional objects to uniquely identify the evaluation. |
... |
Additional arguments passed to |
envir |
The |
drop |
|
force |
If |
Returns the value of the evaluated expr
expression
, if any.
Henrik Bengtsson
Internally, eval
() is used to evaluate the expression.
for (kk in 1:5) { cat(sprintf("Iteration #%d:\n", kk)) res <- evalWithMemoization({ cat("Evaluating expression...") a <- 1 b <- 2 c <- 4 Sys.sleep(1) cat("done\n") b }) print(res) # Sanity checks stopifnot(a == 1 && b == 2 && c == 4) # Clean up rm(a, b, c) } # for (kk ...) ## OUTPUTS: ## Iteration #1: ## Evaluating expression...done ## [1] 2 ## Iteration #2: ## [1] 2 ## Iteration #3: ## [1] 2 ## Iteration #4: ## [1] 2 ## Iteration #5: ## [1] 2 ############################################################ # WARNING ############################################################ # If the expression being evaluated depends on # "input" objects, then these must be be specified # explicitly as "key" objects. for (ii in 1:2) { for (kk in 1:3) { cat(sprintf("Iteration #%d:\n", kk)) res <- evalWithMemoization({ cat("Evaluating expression...") a <- kk Sys.sleep(1) cat("done\n") a }, key=list(kk=kk)) print(res) # Sanity checks stopifnot(a == kk) # Clean up rm(a) } # for (kk ...) } # for (ii ...) ## OUTPUTS: ## Iteration #1: ## Evaluating expression...done ## [1] 1 ## Iteration #2: ## Evaluating expression...done ## [1] 2 ## Iteration #3: ## Evaluating expression...done ## [1] 3 ## Iteration #1: ## [1] 1 ## Iteration #2: ## [1] 2 ## Iteration #3: ## [1] 3
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.