[英]How to have a Memoise cached function remain cached after package rebuild in 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.
默認情況下,緩存位於內存中,由於重新啟動R會話,因此在軟件包重建中將其清除。
您可以在memoise
使用文件系統緩存,例如將緩存保留在inst
文件夾中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.