У меня есть следующий код, который работает:
library(foreach)
cl <- makeCluster(2)
registerDoSNOW(cl)
foreach(i = unique(iris$Species), .verbose = T , .multicombine = TRUE, .packages = c("data.table"),
.export = "jsonEntityField") %do% {
subset <- iris[Species %in% i]
candToEntityList(subset)
}
stopCluster(cl)
В основном он создает длинные строки и возвращает их в виде списка.Функция candToEntityList(subset)
Извлекает информацию из таблицы, возвращая JSON в формате String.Внутри он создает экземпляры класса jsonEntityField
, который является классом S4 R, который я создал, и который имеет следующий синтаксис:
setClass("jsonEntityField", representation(name = "character", type = "numeric", ...))
. Эти jsonEntityObjects
используются для создания строки json.Пока все хорошо, но при попытке изменить %do%
на %dopar%
, чтобы сделать его параллельным, я получаю ошибку:
Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
unable to find variable "jsonEntityField"
При удалении export
появляется ошибка: Error in { : task 1 failed - ""jsonEntityField" is not a defined class"
вместо этого.
Кто-нибудь имеет представление о том, что происходит?