是否有一个预定义的位置,其中的R包可以存储缓存的数据? 这些数据应存在于会话。 我在想创建一个子目录${R_LIBS_USER}/package_name
,但我不知道这是便携式的,如果这是“允许”如果我的软件包安装系统范围。
我们的想法是以下操作:创建的R脚本mydata.R
在data
这将通过调用被执行的包的子目录data(mydata)
根据的文档data()
这个脚本会从互联网上加载数据和缓存它,如果它以前没有缓存。 (如果数据已经被缓存,缓存将被使用。)此外,功能将提供给缓存失效和/或检查数据的更新版本可在网上。
这从文档data()
目前,数据文件的支持四种格式:
文件结束“.R”或“.R”是源()d在,与将R工作目录暂时改变到含有各文件的目录。 (数据确保utils软件包被安装,在情况下,它已经通过utils的::数据运行。)
...
事实上,创建文件fortytwo.R
在data
具有以下内容包的子目录:
fortytwo = data.frame(answer=42)
然后执行data(fortytwo)
创建一个数据帧可变fortytwo
。 现在的问题是:如果将fortytwo.R
缓存中的数据,如果它是很难计算的?
编辑 :我想创建两个包:一个“数据”包,它提供的数据,上它所经营的“代码”包。 这个问题涉及到“数据”包:它在哪里可以存储在每个用户的存储文件,以便它跨越的R会话持久的,是从不同的R项目的访问?
相关阅读: 包装,从安装在互联网下载数据 。
存在用于特定R.包持久高速缓存没有绝对定义的位置然而, R.cache包提供一个接口,用于创建和管理缓存的数据。 它看起来像它可能是您的方案非常有用。
当用户加载R.cache( library(R.cache)
他们得到以下提示:
The R.cache package needs to create a directory that will hold cache files.
It is convenient to use one in the user's home directory, because it remains
also after restarting R. Do you wish to create the '~/.Rcache/' directory? If
not, a temporary directory (/tmp/RtmpqdUcbP/.Rcache) that is specific to this
R session will be used. [Y/n]:
然后,他们可以选择在自己的主目录,这大概是持久的,或创建一个会话特定的目录下创建高速缓存目录。 如果你让你的数据包取决于R.cache,你可以检查其缓存的对象(S)的存在.onLoad()
钩子函数和下载数据,如果它不存在。 或者,你可以在你自己的问题建议的方式做到这一点。
你看在内存数据库? H2和Redis的有R中的绑定通过RH2&rredis-都允许电阻R sessions-共享数据,直到创建会话存活。 为了拥有它横跨非并发会话持久性,您需要将数据写入到磁盘(假设将打败这个问题的目的飞越时,你无法重新创建它),我相信数据包将是一个不错的选择。 通过这种方式,可以添加一个初始化的每次更新功能加载任何包(即,如果代码包有正确的依赖)
一个例子是RWeka&RWekaJars包。 看看他们在CRAN,它应该是很容易理解它们是如何工作。
文章来源: Is there a persistent location that is always writable which can be used as data cache by a package?