使用 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
假设我有 运行 一个记忆函数,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