使用备忘录加载当前缓存

时间:2018-11-18 17:34:02

标签: r memoization memoise

让我们假设我运行了一个备注函数,该函数返回整数输出。现在,我不知道用于存储当前缓存的输入是什么。如果使用备忘录包,有什么方法可以获取当前已缓存的整数输出?

下面是一些简单的代码:

library(memoise)
fn <- function(x) x+5
fn_mem <- memoise(fn)
a <- fn_mem(5)

现在假设由于某种原因,我丢失了变量a,并且不记得fn_mem是使用输入参数5运行的,但是仍然需要知道什么时候输出fn_mem已运行。

在这种情况下是否可以获得当前缓存的结果?

1 个答案:

答案 0 :(得分:1)

可以定义以下函数,该函数接受一个已记忆的函数并返回其上一次评估的结果:

getLast <- function(fn){
    stopifnot(class(fn) == c("memoised", "function"))
    keys <- get("_cache", envir=environment(fn))$keys()
    n <- length(keys)
    get("_cache", envir=environment(fn))$get(keys[n])[[1]]
}

示例:

library(memoise)
fn <- function(x) x*10
fn_mem <- memoise(fn)
fn_mem(1)
[1] 10
getLast(fn_mem)
[1] 10

fn_mem(7)
[1] 70
getLast(fn_mem)
[1] 70