【问题标题】:how to parallelize Outer function in r?如何在 r 中并行化外部函数?
【发布时间】:2019-12-31 01:50:15
【问题描述】:

我想使用外部函数在列表中构建各种对象的相似性矩阵,并使用并行化代码以有效的方式进行。换句话说,如何在外部并行化 FUN 矩阵

我在 Windows 上使用 Rstudio 版本 1.2.1335 和 R x64 3.6.1。 这是一个简单的代码示例:

my_list <- list("a"=c("A", "B", "C") , "b"=c("B", "A", "D"), "c"=c("C", "A", "D"), "d"=c("D", "B", "C"))

my_matrix <- outer(my_list, my_list, Vectorize(function(x,y) getsimilarityscore(x,y), vectorize.args = c("x", "y")))

我期待一个具有相似度分数的矩阵。

【问题讨论】:

  • 可能有更好的选择,但一种方法是先生成组合,然后您可以使用任何并行实现将您的函数应用于组合。
  • 您可以使用嵌套的 foreach 调用。在这里,我认为 outer 没有帮助,因为您的函数没有真正矢量化。
  • 我想知道future 包是否有助于编写一个可以进入outer() 的函数。
  • 我之前尝试过 foreach,但它给了我很多矩阵而不是一个。感谢@F.Privé 我尝试了嵌套的 foreach 并且效果很好。
  • @MahmoudFassad 如果其他人有同样的问题,您可以提供您的解决方案。

标签: r parallel-processing outer-join


【解决方案1】:

我已经按照@F 的建议尝试了嵌套的 foreach。私享!它运作良好。 这是我使用的代码:

library(doParallel)
cl <- parallel::makeCluster("number of cores")
doParallel::registerDoParallel(cl)
my_matrix <- foreach(i = my_list, .combine = 'cbind', .packages = 'yourSimilarityPackage') %:%
  foreach(j = my_ist, .combine = 'c', .packages = 'yourSimilarityPackage') %dopar% {
    getsimilarityscore(i, j)
  }
stopCluster(cl = NULL)

那么你需要改变矩阵的列名和行名

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 2019-05-07
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多