是否有一个始终可写的持久位置,可以用作包的数据缓存?

krl*_*mlr 15 r package

是否存在R包可以存储缓存数据的预定义位置?数据应该跨会话持续存在.我正在考虑创建一个子目录${R_LIBS_USER}/package_name,但我不确定这是否是可移植的,如果我的软件包在系统范围内安装,那么这是"允许的".

这个想法如下:在包mydata.Rdata子目录中创建一个R脚本,该脚本将通过调用data(mydata)(根据文档data())执行.此脚本将从Internet加载数据并缓存它,如果之前尚未缓存的话.(如果已经缓存了数据,则将使用缓存.)此外,还将提供一个函数来使缓存无效和/或检查是否可以在线获得更新版本的数据.

这来自以下文件data():

目前,支持四种格式的数据文件:

  1. 结束'.R'或'.r'的文件是source()d in,R工作目录暂时更改为包含相应文件的目录.(数据确保附加了utils包,以防它通过utils :: data运行.)

  2. ...

实际上,fortytwo.Rdata包的子目录中创建一个文件,其中包含以下内容:

fortytwo = data.frame(answer=42)
Run Code Online (Sandbox Code Playgroud)

然后执行data(fortytwo)创建数据框变量fortytwo.现在的问题是:fortytwo.R如果难以计算,会在哪里缓存数据?

编辑:我正在考虑创建两个包:一个提供数据的"数据"包,以及一个对其进行操作的"代码"包.问题涉及"数据"包:它在哪里可以将文件存储在每个用户的存储中,以便它在R会话中保持不变并且可以从不同的R项目访问?

相关:在安装期间从Internet下载数据的程序包.

jac*_*ger -3

您看过内存数据库吗?H2 和 Redis 通过 RH2 和 rredis 在 R 中进行绑定 - 两者都允许您跨 r 会话共享数据 - 直到创建会话处于活动状态。为了让它在非并发会话中持续存在,您需要将数据写入磁盘(假设您无法动态重新创建它 - 这将破坏这个问题的目的),并且我相信数据包将是一个不错的选择。这样,您可以添加一个更新函数,每次加载任一包时都会进行初始化(即,如果代码包具有正确的依赖项)

一个例子是 RWeka 和 RWekaJars 包。在 CRAN 上查找它们,应该很容易理解它们的工作原理。