首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在snow集群上分发列表

在snow集群上分发列表
EN

Stack Overflow用户
提问于 2012-05-12 00:20:51
回答 2查看 917关注 0票数 2

当数据只包含在一个列表或矩阵中时,snow包parXapply()函数可以很好地工作,但在本例中,我需要在四种不同类型的矩阵上运行一个函数。

例如,这是我现在所拥有的:

代码语言:javascript
复制
res.list = parLapply(cl, mynames, myfun, listA, listB, listC, listD)

myfun = function(name, listA, listB, listC, listD) {
  matrixA = listA[[name]]
  matrixB = listB[[name]]
  matrixC = listC[[name]]
  matrixD = listD[[name]]
}

我遇到的问题是矩阵非常大,我怀疑在完整列表上调用parLapply()会将所有数据传输到每个集群节点。这可能非常耗时,并会降低群集性能。

如何在调用myfun()之前拆分列表,并只将相关矩阵发送到每个节点进行处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-12 03:48:54

clusterMap()完成这项工作:

代码语言:javascript
复制
res.list = clusterMap(cl, myfun, mynames, listA, listB, listC, listD)

不知何故,parMapply()包装器被遗漏在包中。

票数 5
EN

Stack Overflow用户

发布于 2014-08-13 06:37:24

我认为罗伯特·库布里克给出的答案是使用clusterMap最好地回答了这个问题。但是,我认为其他搜索相关问题答案的人可能会从另一个选择中受益-- mcmapply (它是mapply的多核版本)。例如:

代码语言:javascript
复制
mcmapply(rep, 1:4, 4:1)

mcmapply使用forking实现了一个并行的图形用户界面( mapply ),这意味着它是,而不是Windows机器上的选项。顺便说一下,还有一个mclapply,它是lapply的多核版本。

因此,mcmapplymclapply是您所期望的parMapplyparLapply的最简单版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10555106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档