2011-07-29 27 views
7

每当我在R中看到关于并行处理的问题时,它都会使用foreach函数。由于for环路不是非常类似于R的,是否有平行版本的apply,如果有的话,它为什么不是更受欢迎?R平行扩展是否打破了“应用”隐喻?

+0

在我的情况下,'foreach'的吸引力在于它允许我将多个变量传递给函数,选择如何组合结果并且比'apply'等价物更具可读性。我不知道他们在速度方面的差异。 – Backlin

+0

@Backlin:但同样的批评可以用'for'和'apply'(非并行版本)来形容,人们争论这个申请系列。它与速度的东西一样是一种风格的东西...... –

回答

9

还有的*apply众多并行版本,在雪开始

  • parLapply()
  • 多核
  • mclapply()
  • 在RMPI

以及专用软件包,如papply

  • mpi.apply()(可能不再保持)。

  • +0

    它们是如此容易使用,那么没有人会问他们有什么问题吗? :-)也许这只是过去几周,但有很多关于这些问题的foreach问题。在SO上搜索这三个结果只能得到mclapply()的结果,而不是那么多。 –

    +0

    您可以从一份调查报告开始,例如[JSS中的这一份](http://www.jstatsoft.org/v31/i01/paper)。 –

    +0

    这是一张方便的纸张。 –

    1

    @Dirk是正确的。我想补充一点,plyr包现在支持并行后端。

    plyr包的情况下,可能会出现这样的情况,因为在并行后端放入数据并不需要考虑:它只是一个标志。

    +0

    我想你可能是对的,它没有得到任何提及,因为它只是起作用。为什么它不适用于apply?最终,这似乎是一个正确的比喻:让图书馆处理并行化,所有用户所要做的就是决定他们是否想要它平行运行...... –

    +0

    实际上,这些功能的一部分是相当新的,人们只是开始采用它。 – Iterator

    +0

    是的,但是foreach似乎是他们中最新的,并且它是获得所有关注的人。 –