foreach внутри функции пакета: не работает при первом вызове

Я пытаюсь добавить опцию параллельного вычисления в пакет R (netresponse) на основе doMC и многоядерности. Сценарий работает нормально, но только на втором испытании.

Чтобы воспроизвести ошибку, запустите R и запустите скрипт ниже. Он застревает на последней строчке. После прерывания с помощью ctrl-c я получаю несколько сообщений "select: Interrupted system call". Затем повторный запуск этого же сценария даст ожидаемый результат без проблем.

Нужна ли дальнейшая инициализация, чтобы правильно выполнить эту работу уже при первом запуске? Или любые другие советы?

спасибо за вашу поддержку, - L


require(netresponse)
require(multicore)
require(doMC)   
registerDoMC(3)
print(getDoParWorkers())
res <- foreach(i = 1:100, .combine = cbind, 
        .packages = "netresponse") %dopar% netresponse::vdp.mixt(matrix(rnorm(1000), 100, 10))

2 ответа

Вот список зависимостей со страницы справки для пакета netresponse: "Зависит: методы, igraph, graph, minet". Я подозреваю, что вы не получаете все их работникам, просто перечислив "netresponse" на .packages аргумент.

Быстрое решение проблемы с foreach %dopar% - переустановка этих пакетов:

install.packages("doSNOW")

install.packages("doParallel") 

install.packages("doMPI")

Как упоминалось в различных потоках в Stackru, они отвечают за параллелизм в R. Ошибка, существовавшая в старых версиях этих пакетов, теперь удалена. Я должен отметить, что это, скорее всего, поможет, даже если вы не используете эти пакеты в своем проекте / пакете.

Другие вопросы по тегам