1

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

下面是一些简约的代码:

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

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

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

4

1 回答 1

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
于 2018-11-18T22:40:54.383 回答