Как сохранить кэшированную функцию Memoise в кэше после перестроения пакета в R

Я использую пакет Memoise для кэширования вызовов функций в пакете R, который я разрабатываю. Во время разработки я регулярно перестраиваю свой пакет. Но каждый раз, когда я это делаю, вызовы кэшированных функций забываются. Любые предложения о том, как сохранить эти вызовы функций в кэше? Предпочтительно использовать пакет Memoise. Но если это невозможно, альтернативное предложение будет оценено.

Чтобы воспроизвести с нуля, сделайте это:

Часть 1 - Создание пакета

На интерактивной консоли R создайте пакет с именем "TmpTestPackage1". (Это создаст каталог с именем "TmpTestPackage1" в вашем текущем рабочем каталоге):

> library("devtools")
> create("TmpTestPackage1")

Создайте файл./TmpTestPackage1/R/SomeCode.R и вставьте содержимое:

library("memoise")

longFunction = function() {
    Sys.sleep(5)
    return(7)
}

cachedLongFunction = memoise::memoise(longFunction)

someOtherFunction = function() {    
    return(cachedLongFunction())
}

А теперь на консоли R (из родительского каталога каталога TmpTestPackage1, с devtools по-прежнему доступны):

> library("devtools")
> install("TmpTestPackage1")

ЧАСТЬ 2 - Воспроизвести мою проблему

> library("TmpTestPackage1")
> someOtherFunction() # This waits for 5 seconds as expected
> someOtherFunction() # Now completes almost immediately because
                      # the function call is cached. Good.
> install("TmpTestPackage1")
> someOtherFunction() # This waits 5 seconds again! I want it to
                      # still be cached however.

1 ответ

Решение

По умолчанию кэш находится в памяти, которая очищается при перестройке пакета после перезапуска R-сеанса.

Вы можете использовать кеш файловой системы в memoise, например, держать кеш в inst папка.

Другие вопросы по тегам