Как сохранить кэшированную функцию 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
папка.