Package memoise. April 21, 2017

Similar documents
Package aws.transcribe

Package knitrprogressbar

Package messaging. May 27, 2018

Package cattonum. R topics documented: May 2, Type Package Version Title Encode Categorical Features

Package calpassapi. August 25, 2018

Package available. November 17, 2017

Package pkgbuild. October 16, 2018

Package sessioninfo. June 21, 2017

Package rprojroot. January 3, Title Finding Files in Project Subdirectories Version 1.3-2

Package spark. July 21, 2017

Package redux. May 31, 2018

Package spelling. December 18, 2017

Package fastdummies. January 8, 2018

Package datasets.load

Package opencage. January 16, 2018

Package dbx. July 5, 2018

Package bigqueryr. October 23, 2017

Package gtrendsr. August 4, 2018

Package essurvey. August 23, 2018

Package robotstxt. November 12, 2017

Package IATScore. January 10, 2018

Package gtrendsr. October 19, 2017

Package tibble. August 22, 2017

Package librarian. R topics documented:

Package virustotal. May 1, 2017

Package simplecache. August 22, 2017

Package cli. November 5, 2017

Package humanize. R topics documented: April 4, Version Title Create Values for Human Consumption

Package shinyhelper. June 21, 2018

Package pwrab. R topics documented: June 6, Type Package Title Power Analysis for AB Testing Version 0.1.0

Package httpcache. October 17, 2017

Package data.world. April 5, 2018

Package mdftracks. February 6, 2017

Package repec. August 31, 2018

Package validara. October 19, 2017

Package crochet. January 8, 2018

Package darksky. September 20, 2017

Package condusco. November 8, 2017

Package canvasxpress

Package covr. October 18, 2018

Package docxtools. July 6, 2018

Package geojsonsf. R topics documented: January 11, Type Package Title GeoJSON to Simple Feature Converter Version 1.3.

Package swatches. December 21, 2017

Package farver. November 20, 2018

Package rcmdcheck. R topics documented: November 10, 2018

Package githubinstall

Package kirby21.base

Package wrswor. R topics documented: February 2, Type Package

Package shinytest. May 7, 2018

Package fst. June 7, 2018

Package bigreadr. R topics documented: August 13, Version Date Title Read Large Text Files

Package strat. November 23, 2016

Package patentsview. July 12, 2017

Package pkgload. July 8, 2018

Package bigqueryr. June 8, 2018

Package purrrlyr. R topics documented: May 13, Title Tools at the Intersection of 'purrr' and 'dplyr' Version 0.0.2

Package algorithmia. September 13, 2016

Package kdtools. April 26, 2018

Package cloudml. June 12, 2018

Package clipr. June 23, 2018

Package lxb. R topics documented: August 29, 2016

Package gggenes. R topics documented: November 7, Title Draw Gene Arrow Maps in 'ggplot2' Version 0.3.2

Package ECctmc. May 1, 2018

Package fst. December 18, 2017

Package dkanr. July 12, 2018

Package readxl. April 18, 2017

Package ezknitr. September 16, 2016

Package projector. February 27, 2018

Package texpreview. August 15, 2018

Package iccbeta. January 28, 2019

Package liftr. R topics documented: May 14, Type Package

Package rngtools. May 15, 2018

Package testit. R topics documented: June 14, 2018

Package utilsipea. November 13, 2017

Package internetarchive

Package shiny.router

Package pdfsearch. July 10, 2018

Package modules. July 22, 2017

Package sfc. August 29, 2016

Package loggit. April 9, 2018

Package rzeit2. January 7, 2019

Package geniusr. December 6, 2017

Package jstree. October 24, 2017

Package desc. May 1, 2018

Package oasis. February 21, 2018

Package postal. July 27, 2018

Package rtext. January 23, 2019

Package raker. October 10, 2017

Package reval. May 26, 2015

Package semver. January 6, 2017

Package radix. September 17, 2018

Package textrank. December 18, 2017

Package tidyselect. October 11, 2018

Package facerec. May 14, 2018

Package filelock. R topics documented: February 7, 2018

Package sqlscore. April 29, 2018

Package rgdax. January 7, 2019

Package UNF. June 13, 2017

Package bisect. April 16, 2018

Package ether. September 22, 2018

Transcription:

Encoding UTF-8 Title Memoisation of Functions Version 1.1.0 Package memoise April 21, 2017 Cache the results of a function so that when you call it again with the same arguments it returns the pre-computed value. URL https://github.com/hadley/memoise BugReports https://github.com/hadley/memoise/issues Imports digest (>= 0.6.3) Suggests testthat, aws.s3, httr, covr Additional_repositories http://cloudyr.github.io/drat License MIT + file LICENSE RoxygenNote 6.0.1 NeedsCompilation no Author Hadley Wickham [aut], Jim Hester [aut, cre], Kirill Müller [aut], Daniel Cook [aut] Maintainer Jim Hester <jim.hester@rstudio.com> Repository CRAN Date/Publication 2017-04-21 05:54:22 UTC R topics documented: cache_filesystem...................................... 2 cache_memory....................................... 2 cache_s3........................................... 3 forget............................................ 3 has_cache.......................................... 4 is.memoised......................................... 5 memoise........................................... 5 timeout........................................... 7 1

2 cache_memory Index 9 cache_filesystem Filesystem Cache Use a cache on the local filesystem that will persist between R sessions. cache_filesystem(path, algo = "xxhash64") path algo Directory in which to store cached items. The hashing algorithm used for the cache, see digest for available algorithms. ## Not run: # Use with Dropbox db <- cache_filesystem("~/dropbox/.rcache") mem_runif <- memoise(runif, cache = db) # Use with Google Drive gd <- cache_filesystem("~/google Drive/.rcache") mem_runif <- memoise(runif, cache = gd) ## End(Not run) cache_memory In Memory Cache A cache in memory, that lasts only in the current R session. cache_memory(algo = "sha512")

cache_s3 3 algo The hashing algorithm used for the cache, see digest for available algorithms. cache_s3 Amazon Web Services S3 Cache Amazon Web Services S3 backed cache, for remote caching. Amazon Web Services S3 Cache Amazon Web Services S3 backed cache, for remote caching. cache_s3(cache_name, algo = "sha512") cache_name algo Bucket name for storing cache files. The hashing algorithm used for the cache, see digest for available algorithms. ## Not run: # Set AWS credentials. Sys.setenv("AWS_ACCESS_KEY_ID" = "<access key>", "AWS_SECRET_ACCESS_KEY" = "<access secret>") # Set up a unique bucket name. s3 <- cache_s3("unique-bucket-name") mem_runif <- memoise(runif, cache = s3) ## End(Not run) forget Forget past results. Resets the cache of a memoised function. Forget past results. Resets the cache of a memoised function. forget(f)

4 has_cache f memoised function memoise, is.memoised memx <- memoise(function() { Sys.sleep(1); runif(1) }) # The forget() function system.time(print(memx())) system.time(print(memx())) forget(memx) system.time(print(memx())) has_cache Test whether a memoised function has been cached for particular arguments. Test whether a memoised function has been cached for particular arguments. has_cache(f,...) f Function to test.... arguments to function. is.memoised, memoise 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

is.memoised 5 is.memoised Test whether a function is a memoised copy. Memoised copies of functions carry an attribute memoised = TRUE, which is.memoised() tests for. Test whether a function is a memoised copy. Memoised copies of functions carry an attribute memoised = TRUE, which is.memoised() tests for. is.memoised(f) f Function to test. memoise, forget mem_lm <- memoise(lm) is.memoised(lm) # FALSE is.memoised(mem_lm) # TRUE memoise Memoise a function. mf <- memoise(f) creates mf, a memoised copy of f. A memoised copy is basically a lazier version of the same function: it saves the answers of new invocations, and re-uses the answers of old ones. Under the right circumstances, this can provide a very nice speedup indeed. memoise(f,..., envir = environment(f), cache = cache_memory()) f Function of which to create a memoised copy.... optional variables specified as formulas with no RHS to use as additional restrictions on caching. See for usage. envir Environment of the returned function. cache Cache function.

6 memoise Details There are two main ways to use the memoise function. Say that you wish to memoise glm, which is in the stats package; then you could use mem_glm <- memoise(glm), or you could use glm <- memoise(stats::glm). The first form has the advantage that you still have easy access to both the memoised and the original function. The latter is especially useful to bring the benefits of memoisation to an existing block of R code. Two example situations where memoise could be of use: You re evaluating a function repeatedly over the rows (or larger chunks) of a dataset, and expect to regularly get the same input. You re debugging or developing something, which involves a lot of re-running the code. If there are a few expensive calls in there, memoising them can make life a lot more pleasant. If the code is in a script file that you re source()ing, take care that you don t just put glm <- memoise(stats::glm) at the top of your file: that would reinitialise the memoised function every time the file was sourced. Wrap it in if (!is.memoised(glm)), or do the memoisation call once at the R prompt, or put it somewhere else where it won t get repeated. forget, is.memoised, timeout, http://en.wikipedia.org/wiki/memoization # a() is evaluated anew each time. mema() is only re-evaluated # when you call it with a new set of parameters. a <- function(n) { runif(n) } mema <- memoise(a) replicate(5, a(2)) replicate(5, mema(2)) # Caching is done based on parameters' value, so same-name-but- # changed-value correctly produces two different outcomes... N <- 4; mema(n) N <- 5; mema(n) #... and same-value-but-different-name correctly produces # the same cached outcome. N <- 4; mema(n) N2 <- 4; mema(n2) # memoise() knows about default parameters. b <- function(n, dummy="a") { runif(n) } memb <- memoise(b) memb(2) memb(2, dummy="a") # This works, because the interface of the memoised function is the same as # that of the original function.

timeout 7 formals(b) formals(memb) # However, it doesn't know about parameter relevance. # Different call means different caching, no matter # that the outcome is the same. memb(2, dummy="b") # You can create multiple memoisations of the same function, # and they'll be independent. mema(2) mema2 <- memoise(a) mema(2) # Still the same outcome mema2(2) # Different cache, different outcome # Don't do the same memoisation assignment twice: a brand-new # memoised function also means a brand-new cache, and *that* # you could as easily and more legibly achieve using forget(). # (If you're not sure whether you already memoised something, # use is.memoised() to check.) mema(2) mema <- memoise(a) mema(2) # Making a memoized automatically time out after 10 seconds. mema3 <- memoise(a, ~{current <- as.numeric(sys.time()); (current - current %% 10) %/% 10 }) mema3(2) # The timeout function is an easy way to do the above. mema4 <- memoise(a, ~timeout(10)) mema4(2) timeout Return a new number after a given number of seconds This function will return a number corresponding to the system time and remain stable until a given number of seconds have elapsed, after which it will update to the current time. This makes it useful as a way to timeout and invalidate a memoised cache after a certain period of time. timeout(seconds, current = as.numeric(sys.time())) seconds current Number of seconds after which to timeout. The current time as a numeric.

8 timeout Value A numeric that will remain constant until the seconds have elapsed. memoise a <- function(n) { runif(n) } mema <- memoise(a, ~timeout(10)) mema(2)

Index cache_filesystem, 2 cache_memory, 2 cache_s3, 3 digest, 2, 3 forget, 3, 5, 6 has_cache, 4 is.memoised, 4, 5, 6 is.memoized (is.memoised), 5 memoise, 4, 5, 5, 8 memoize (memoise), 5 timeout, 6, 7 9