Загрузить текущий кеш с помощью memoise

Предположим, я запустил запомненную функцию, которая возвращает целочисленный вывод. Теперь я не знаю, какие входы использовались для хранения текущего кеша. Есть ли способ получить текущий целочисленный вывод, который был кэширован при использовании пакета memoise?

Ниже приведен минималистичный код:

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

Теперь предположим, что по какой-то причине я потерял переменную a и не помню, что fn_mem запускался с входным параметром 5, но мне все равно нужно знать, что было на выходе при запуске fn_mem.

Можно ли в таком случае получить текущий кешированный результат?


person aajkaltak    schedule 18.11.2018    source источник
comment
Пожалуйста, проиллюстрируйте свой вопрос кодом, чтобы сделать его более точным.   -  person Florian    schedule 18.11.2018
comment
добавлен код, чтобы дать перспективу   -  person aajkaltak    schedule 18.11.2018


Ответы (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
person Florian    schedule 18.11.2018