如何在r中并行化外部函数?

时间:2019-08-26 21:34:17

标签: r parallel-processing outer-join

我想使用外部函数在列表中构建各种对象的相似性矩阵,并使用并行化代码以有效的方式来实现。换句话说,如何在外部并行化FUN 矩阵<-external(X,Y,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")))

我期望矩阵具有相似的分数。

1 个答案:

答案 0 :(得分:2)

我尝试了@F建议的嵌套foreach。 ive!而且效果很好。 这是我使用的代码:

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)

然后您将需要更改矩阵的列名和行名