首页 > 解决方案 > R - cpv (trotter package) 和 %dopar%

问题描述

我想知道cpvtrotter 包中的功能是否适用%dopar%?我收到以下错误:

任务 1 失败 - “'S4' 类型的对象不是子集”

这是一个小例子:

library(doParallel)
library(trotter)

registerDoParallel(cores = 2)

x <- letters

combos <- cpv(2, 1:4)
print(combos)
num_combos <- length(combos)

results_list <- foreach(combo_num=1:num_combos) %dopar% { # many iterations
  y <- x[combos[combo_num]]
  # time consuming stuff follows that involves using y
}

替换%dopar%%do%(或简单地使用 for 循环),它工作正常。

标签: rforeachdoparallel

解决方案


根据集群类型,需要通过.packages参数明确指定使用的包。以下应该有效:

library(doParallel)
library(trotter)
cl <- makePSOCKcluster(2)
registerDoParallel(cl=cl)

x <- letters
combos <- cpv(2, 1:4)
num_combos <- length(combos)

rl <- foreach(combo_num=1:num_combos, .packages="trotter") %dopar% {
  x[combos[combo_num]]
}

推荐阅读