package memoise might help you > On 19 Mar 2016, at 17:45, Boris Steipe <boris.ste...@utoronto.ca> wrote: > > Dear all - > > I need to have a function maintain a persistent lookup table of results for > an expensive calculation, a named vector or hash. I know that I can just keep > the table in the global environment. One problem with this approach is that > the function should be able to delete/recalculate the table and I don't like > side-effects in the global environment. This table really should be private. > What I don't know is: > -A- how can I keep the table in an environment that is private to the > function but persistent for the session? > -B- how can I store and reload such table? > -C- most importantly: is that the right strategy to initialize and maintain > state in a function in the first place? > > > For illustration ... > > ----------------------------------- > > myDist <- function(a, b) { > # retrieve or calculate distances > if (!exists("Vals")) { > Vals <<- numeric() # the lookup table for distance values > # here, created in the global env. > } > key <- sprintf("X%d.%d", a, b) > thisDist <- Vals[key] > if (is.na(thisDist)) { # Hasn't been calculated yet ... > cat("Calculating ... ") > thisDist <- sqrt(a^2 + b^2) # calculate with some expensive function > ... > Vals[key] <<- thisDist # store in global table > } > return(thisDist) > } > > > # run this > set.seed(112358) > > for (i in 1:10) { > x <- sample(1:3, 2) > print(sprintf("d(%d, %d) = %f", x[1], x[2], myDist(x[1], x[2]))) > } > > > Thanks! > Boris > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
signature.asc
Description: Message signed with OpenPGP using GPGMail
______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.