相关疑难解决方法(0)

R中的缓存/记忆/散列选项

我试图找到一种简单的方法来使用像R中的Perl的散列函数(基本上是缓存),因为我打算进行Perl风格的散列并编写我自己的计算备忘录.然而,其他人已经打败了我,并有包装备忘.我越挖,越我发现,如memoiseR.cache,但差异不容易明确.另外,目前还不清楚如何使用Perl风格的哈希(或Python风格的词典)并编写一个自己的memoization,而不是使用hash包,这似乎不是两个memoization包的基础.

由于我无法找到有关CRAN或其他地方的信息来区分选项,或许这应该是关于SO的社区维基问题:R中的记忆和缓存有哪些选项,它们的区别是什么?


作为比较的基础,这里是我找到的选项列表.此外,在我看来,所有都依赖于散列,所以我也会注意到散列选项.密钥/值存储在某种程度上是相关的,但是会打开关于数据库系统的大量蠕虫(例如BerkeleyDB,Redis,MemcacheDB和其他许多人).

它看起来像是:

哈希

  • 摘要 - 为任意R对象提供散列.

记忆化

  • memoise - 用于记忆功能的非常简单的工具.
  • R.cache - 为memoization提供了更多功能,虽然看起来有些功能缺少示例.

高速缓存

  • hash - 提供类似于Perl的哈希和Python字典的缓存功能.

键/值存储

这些是R对象外部存储的基本选项.

检查点

其他

  • Base R支持:命名向量和列表,数据框的行和列名称以及环境中项目的名称.在我看来,使用列表有点像kludge.(也有pairlist,但已被弃用.)
  • 所述data.table包支持在一个数据表元素的快速查找.

用例

虽然我最感兴趣的是了解选项,但我有两个基本用例:

  1. 缓存:简单计算字符串.[注意:这不适用于NLP,但一般用途,因此NLP库是过度的; 表格不合适,因为我不想等到整个字符串集加载到内存中.Perl风格的哈希处于适当的实用水平.]
  2. 记忆怪异的计算.

这些真的出现了,因为我正在深入研究一些slooooow代码的分析,我真的只想计算简单的字符串,看看我是否可以通过memoization加速一些计算.能够散列输入值,即使我没有记忆,也会让我看看memoization是否有帮助.


注1:可重复研究CRAN任务视图列出了几个软件包(cacherR.cache),但没有详细说明使用选项.

注2:为了帮助其他人查找相关代码,这里有一些关于一些作者或包的注释.一些作者使用SO.:)

  • Dirk Eddelbuettel: …

hash caching r memoization memoise

69
推荐指数
2
解决办法
1万
查看次数

R控制台可以支持后台任务或中断(事件处理)吗?

在R控制台中工作时,我想设置监视特定连接的后台任务,当事件发生时,执行另一个功能(警报).或者,我可以进行设置,以便外部函数只是向R发送警报,但这似乎是同样的问题:有必要设置一个监听器.

我可以在R的专用过程中执行此操作,但我不知道在控制台中是否可行.另外,如果它正在计算一个函数,我对中断R不感兴趣,但是如果控制台只是在等待输入,则警告或中断.

以下是三个用例:

  1. 最简单的例子是观看文件.假设我有一个名为"latestData.csv"的文件,我想监视它的变化; 当它改变时,myAlert()执行.(可以将它扩展为执行不同的操作,但只是弹出一个文件已更改的注释是有用的.)

  2. 一种不同类型的监视器将监视给定的机器是否在RAM上运行不足并且可能执行save.image()并终止.同样,这可能是一个简单的问题,即观察由外部监视器生成的文件,该文件可以保存输出top或其他命令.

  3. 一个不同的例子就像另一个最近的SO问题,关于:让R停止正在运行的EC2机器.如果来自另一台机器或进程的警报告诉程序保存并终止,那么能够监听该警报将是很好的.

目前,我怀疑有两种方法可以解决这个问题:通过Rserve和可能的via fork.如果有人有关于如何使用包或通过其他方法执行此操作的示例,那将是很好的.我认为解决这三个用例中的任何一个都可以解决所有这些问题,模拟一些外部代码.


注1:我意识到,根据另一个SO问题的答案,R是单线程的,这就是我怀疑fork和Rserve可能工作的原因.但是,如果一个人与R终端接口,我不确定可行性.虽然R的REPL附加到控制台的输入,但我试图绕过它或模仿它,这是答案的地方forkRserve可能.

注2:对于那些熟悉事件处理/事件处理方法的人来说,这也可以解决所有问题.我在R中找不到任何相关内容.


更新1:我发现编写R扩展的手册有一个引用事件处理的部分,其中提到了使用R_PolledEvents.这很有希望.

r interrupt event-handling background-process

8
推荐指数
2
解决办法
2433
查看次数