Загрузить текущий кеш, используя памятку
Давайте предположим, что я запустил запомненную функцию, которая возвращает целочисленный вывод. Теперь я не знаю, какие входы использовались для хранения текущего кэша. Есть ли способ получить текущий целочисленный вывод, который был кэширован при использовании пакета memoise?
Ниже приведен минималистичный код:
library(memoise)
fn <- function(x) x+5
fn_mem <- memoise(fn)
a <- fn_mem(5)
Теперь предположим, что по какой-то причине я потерял переменную a
и не помню этого fn_mem
был запущен с входным параметром 5
но все же нужно знать, какой был выход, когда fn_mem
был запущен.
Можно ли получить текущий кэшированный результат в таком случае?
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