簡體   English   中英

在R中重建軟件包后如何保持Memoise緩存功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM