Я новичок в использовании параллельных пакетов и начал изучать их, пытаясь ускорить часть своей работы. Я часто сталкиваюсь с тем, что команда foreach
вызывает проблемы, когда у меня нет clusterExport
соответствующих функций/переменных.
Я знаю, что приведенный ниже пример не обязательно требует foreach
, чтобы сделать его быстрым, но для иллюстрации я буду использовать его.
library(doParallel)
library(parallel)
library(lubridate)
library(foreach)
cl <- makeCluster(c("localhost", "localhost", "localhost","localhost"), type = "SOCK")
registerDoParallel(cl, cores = 4)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 500, replace = TRUE)
foreach(i = seq_along(Dates), .combine = rbind) %dopar% dmy(Dates[i])
Error in dmy(Dates[i]) : task 1 failed - "could not find function "dmy""
Как видите, есть ошибка, говорящая о том, что функция dmy
не найдена. Затем я должен продолжить и добавить следующее:
clusterExport(cl, c("dmy"))
Таким образом, мой вопрос заключается в том, что помимо просмотра ошибки в поисках подсказок о том, что экспортировать, есть ли более элегантный способ заранее узнать, какие объекты экспортировать, или есть ли способ поделиться глобальной средой со всеми ведомыми перед запуском foreach
?