Предварительное знание объектов для кластерного экспорта.

Я новичок в использовании параллельных пакетов и начал изучать их, пытаясь ускорить часть своей работы. Я часто сталкиваюсь с тем, что команда 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?

7
задан RJ- 21 May 2012 в 15:33
поделиться