在R

时间:2017-07-10 16:17:41

标签: r caching memoise

我使用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 个答案:

答案 0 :(得分:1)

默认情况下,缓存位于内存中,自R会话重启以来,它会在包重建中被清除。

您可以在memoise中使用文件系统缓存,例如将缓存保留在inst文件夹中。