使用 memoise 加载当前缓存

Load current cache using memoise

假设我有 运行 一个记忆函数,returns 一个整数输出。现在,我不知道使用什么输入来存储当前缓存。如果使用 memoise 包,有什么方法可以获取已缓存的当前整数输出?

下面是一些极简代码:

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

现在假设由于某种原因,我丢失了变量 a 并且不记得 fn_mem 是带有输入参数 5 的 运行 但仍然需要知道 fn_mem 为 运行.

时的输出是什么

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

可以定义以下函数,它采用记忆函数和 returns 其上次评估的结果:

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