Ejemplo de trabajo simple de ddply() en paralelo en Windows
ddply package (4)
¿Has registrado un backend paralelo a foreach
?
Es posible que deba leer sobre el uso de foreach
antes de usarlo con plyr
.
He estado buscando un ejemplo simple de uso de ddply () en paralelo. He instalado el paquete "foreach", pero cuando llamo a ddply (.parallel = TRUE) recibo una advertencia de que "No se ha registrado ningún back-end paralelo")
¿Puede alguien proporcionar un ejemplo simple de uso de ddply en paralelo?
A. Me he estado comunicando con Hadley y no hay planes en el futuro inmediato para solucionar este error. La solución en sí puede ser intentada por cualquier persona. Aquí hay algunos consejos que recibí de Hadley:
"Es relativamente fácil en el nivel más simple: solo necesitas pasar un argumento .export para foreach. Lo ideal es que plyr descubra qué exportar automáticamente, pero mientras tanto, modifique .paralelo para obtener una lista de argumentos para foreach ( "en lugar de solo T / F) sería un gran paso. Comience con llply, y si puede hacer que eso funcione, es bastante trivial hacer que todas las demás funciones también funcionen".
B. Recomiendo altamente snow y doSNOW para que paralelo trabaje en Windows. Los otros backends paralelos: 1. no son compatibles con Windows 2. no funcionan en Windows de 64 bits 3. se supone que funcionan en Windows pero están demasiado buggy . snow / doSNOW fue la única solución que funcionó "fuera de la caja"
C. buena suerte!
Aquí hay un ejemplo de trabajo simple:
> df <- data.frame(val=1:10, ind=c(rep(2, 5), rep(3, 5)))
> library(doSNOW)
> registerDoSNOW(makeCluster(2, type = "SOCK"))
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=FALSE)))
ind V1
1 2 25
2 3 55
user system elapsed
0.00 0.00 4.01
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=TRUE)))
ind V1
1 2 25
2 3 55
user system elapsed
0.02 0.00 2.02
En entornos Unix, puede hacer esto utilizando el paquete doMC y su función registerDoMC ()
> registerDoMC()
> example <- ddply(..., .parallel=TRUE)