3

只是想知道是否存在类似R.cache包但不是使用硬盘驱动器而是使用 RAM 的东西?

或者 R 中可能存在一些 hack,让R.cache包相信它使用硬盘驱动器,但是将它的缓存存储到 RAM 中的某种虚拟驱动器?

我也发现了这个很好的问题并尝试了 memoise包,但结果证明它比 R.cache 慢,尽管它适用于 RAM。

4

2 回答 2

5

也许您可以制作一个RAM 磁盘并将该驱动器指定为缓存的存储目标,使用R.cache.

于 2012-09-29T23:37:27.547 回答
1

您可以尝试一下具有自定义缓存引擎的pander函数。evals

有关详细信息,请参阅上面的链接,但简而言之:

  • 启用缓存:(evalsOptions('cache', TRUE)默认值)
  • 你可以设置一个分钟。eval应缓存结果的时间(以秒为单位evalsOptions('cache.time', 0.1)):(默认值)
  • 指定要存储缓存值和散列的位置(disk与 R 相比environment):(evalsOptions('cache.mode', 'environment')默认值)

一个简短的例子:

> library(pander)

> # first time run
> system.time(evals('sapply(rep(mtcars$hp, 1e3), mean)'))
   user  system elapsed 
 12.269   0.020  12.414 

> # second call
> system.time(evals('sapply(rep(mtcars$hp, 1e3), mean)'))
   user  system elapsed 
  0.003   0.000   0.003 

> # check results any time without recomputing those
> str(evals('sapply(rep(mtcars$hp, 1e3), mean)')[[1]]$result)
 num [1:32000] 110 110 93 110 175 105 245 62 95 123 ...
> str(evals('sapply(rep(mtcars$hp, 1e3), mean)'))
List of 1
 $ :List of 6
  ..$ src   : chr "sapply(rep(mtcars$hp, 1000), mean)"
  ..$ result: num [1:32000] 110 110 93 110 175 105 245 62 95 123 ...
  ..$ output: chr [1:1778] "    [1] 110 110  93 110 175 105 245  62  95 123 123 180 180 180 205 215 230  66" "   [19]  52  65  97 150 150 245 175  66  91 113 264 175 335 109 110 110  93 110" "   [37] 175 105 245  62  95 123 123 180 180 180 205 215 230  66  52  65  97 150" "   [55] 150 245 175  66  91 113 264 175 335 109 110 110  93 110 175 105 245  62" ...
  ..$ type  : chr "numeric"
  ..$ msg   :List of 3
  .. ..$ messages: NULL
  .. ..$ warnings: NULL
  .. ..$ errors  : NULL
  ..$ stdout: NULL
  ..- attr(*, "class")= chr "evals"
于 2012-10-01T08:00:27.347 回答