Использование классов объектов S4 внутри параллельного foreach - PullRequest
1 голос
/ 03 июня 2019

У меня есть следующий код, который работает:

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"вместо этого.

Кто-нибудь имеет представление о том, что происходит?

...