Soy nuevo en el uso de paquetes paralelos y he comenzado a explorarlos en un intento de acelerar algo de mi trabajo. Una molestia que encuentro a menudo es que el comando foreach
arrojará problemas cuando no tenga clusterExport
las funciones/variables relevantes.Saber qué objetos agrupar Exportar de antemano
Ejemplo
Sé que el ejemplo siguiente no necesita necesariamente foreach
para que sea rápido, pero por el bien ilustración, lo usaré.
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""
Como se puede ver, no es un error que dice que la función dmy
no se encuentra. entonces tengo que seguir y agregar lo siguiente:
clusterExport(cl, c("dmy"))
Así que mi pregunta es, además de buscar en el error en busca de pistas sobre qué exportar, hay una manera más elegante de saber de antemano lo que se opone a exportar o es Hay una manera de compartir el entorno global con todos los esclavos antes de ejecutar el foreach
?
Hay un argumento '.packages' para eso. –
¿Te importaría elaborar? Intenté (.packages()) y enumeré los paquetes adjuntos. Pero, ¿cómo exporto todos los objetos de un paquete? Probé clusterExport (cl, c ("library (lubridate)")) y clusterExport (cl, c ("lubridate")) en vano – JackeJR
Lo siento, quise decir el argumento '.packages' para' foreach', no ' función de .packages' –