Загрузить текущий кеш, используя памятку

Давайте предположим, что я запустил запомненную функцию, которая возвращает целочисленный вывод. Теперь я не знаю, какие входы использовались для хранения текущего кэша. Есть ли способ получить текущий целочисленный вывод, который был кэширован при использовании пакета 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
Другие вопросы по тегам