R并行扩展是否破坏了“apply”隐喻?

7

每次我看到有关R中并行处理的问题时,都会使用foreach函数。由于for循环不太像R语言,是否有apply的并行版本,如果有,为什么没有更受欢迎呢?


在我的情况下,foreach 的吸引力在于它允许我将多个变量传递到函数中,选择如何组装结果,并且比 apply 等价物更易读。但是我不知道它们在速度方面如何比较。 - Backlin
@Backlin: 但是同样的批评也可以针对forapply(非并行版本)进行,人们也会为apply家族激烈争论。这既是一种风格问题,也是一种速度问题... - Ari B. Friedman
2个回答

9

有许多并行版本的*apply,从以下开始:

  • snow中的parLapply()
  • multicore中的mclapply()
  • Rmpi中的mpi.apply()

还有专门的包,如papply(可能不再维护)。


它们是不是太容易使用了,以至于没人对它们提出任何问题呢? :-) 也许只是最近几周,但有相当多的foreach问题,而非这些问题。在SO上搜索这三个字仅会得到关于mclapply()的结果,而且数量不多。 - Ari B. Friedman
你可以从一篇调查论文开始,例如JSS上的这篇论文 - Dirk Eddelbuettel
它还被引用自CRAN任务视图:使用R进行高性能计算,我想你已经看过了吧? - Dirk Eddelbuettel
我看过这个任务视图,我想我可能之前瞥过这篇论文,但没有完全欣赏它。 :-) - Ari B. Friedman

1

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

对于 plyr 包来说,可能很少提到它,因为添加并行后端不需要考虑太多:只是一个标志而已。


我认为你说得对,这可能是因为它只是起作用而没有被提及。为什么使用apply的方式不同呢?最终,这似乎是正确的隐喻:让库处理并行化,所有用户需要做的就是决定是否要并行运行... - Ari B. Friedman
从实际角度来看,这些功能中的一些是相当新的,人们刚开始采用它。 - Iterator
是的,但是foreach似乎是它们中最新的,也是得到所有关注的一个... - Ari B. Friedman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接