类似于R.cache但在RAM中

类似于R.cache但在RAM中,r,R,只是想知道是否存在类似于R.cache的软件包,但它不使用硬盘,而是使用RAM 或者R中可能存在一些黑客攻击,使R.cache软件包相信它使用硬盘,但将其缓存存储到RAM中的某种虚拟驱动器 我也发现了这个很棒的并且尝试过的memoise软件包,但是对于我的问题,它比R.cache慢,尽管它在RAM上工作。也许您可以制作一个并指定该驱动器作为缓存的存储目标,使用R.cache您可以尝试使用带有引擎的evals函数 有关详细信息,请参见上面的链接,简而言之: 启用缓存:evalsOptions('

只是想知道是否存在类似于R.cache的软件包,但它不使用硬盘,而是使用RAM

或者R中可能存在一些黑客攻击,使R.cache软件包相信它使用硬盘,但将其缓存存储到RAM中的某种虚拟驱动器

我也发现了这个很棒的并且尝试过的memoise软件包,但是对于我的问题,它比R.cache慢,尽管它在RAM上工作。

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

您可以尝试使用带有引擎的
evals
函数

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

  • 启用缓存:
    evalsOptions('cache',TRUE)
    (默认值)
  • 您可以设置缓存结果的最小时间(
    eval
    秒):
    evalsOptions('cache.time',0.1)
    (默认值)
  • 指定要存储缓存值和哈希值的位置(
    disk
    vs.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"

+1--OP没有告诉我们他使用什么操作系统,但这可能是目前为止最好的选择。谢谢Alex。我尝试了三种不同的RAM磁盘程序。仅在其中一项上实现了性能改进。尽管如此,只有25%的改善,而我预计会有80%左右的改善。看起来对我来说最好的选择是为我试图解决的问题编写自己的自定义缓存。谢谢,我肯定也会尝试。