usar loop funcion for estructuras crear control como ciclos bucles anidado r parallel-processing parallel-foreach

loop - ejecutar un bucle for en paralelo en R



funcion repeat en r (1)

Tengo un bucle for que es algo como esto:

for (i=1:150000) { tempMatrix = {} tempMatrix = functionThatDoesSomething() #calling a function finalMatrix = cbind(finalMatrix, tempMatrix) }

¿Podrías decirme cómo hacer esto en paralelo?

Intenté esto basado en un ejemplo en línea, pero no estoy seguro de si la sintaxis es correcta. Tampoco aumentó mucho la velocidad.

finalMatrix = foreach(i=1:150000, .combine=cbind) %dopar% { tempMatrix = {} tempMatrix = functionThatDoesSomething() #calling a function cbind(finalMatrix, tempMatrix) }


Gracias por sus comentarios. Miré en parallel después de publicar esta pregunta.

Finalmente, después de algunos intentos, lo puse en funcionamiento. He agregado el código a continuación en caso de que sea útil para otros

library(foreach) library(doParallel) #setup parallel backend to use many processors cores=detectCores() cl <- makeCluster(cores[1]-1) #not to overload your computer registerDoParallel(cl) finalMatrix <- foreach(i=1:150000, .combine=cbind) %dopar% { tempMatrix = functionThatDoesSomething() #calling a function #do other things if you want tempMatrix #Equivalent to finalMatrix = cbind(finalMatrix, tempMatrix) } #stop cluster stopCluster(cl)

Nota: debo agregar una nota de que si el usuario asigna demasiados procesos, entonces el usuario puede recibir este error: Error in serialize(data, node$con) : error writing to connection

Nota: si .combine en la instrucción foreach es rbind , entonces el objeto final devuelto se habría creado agregando la salida de cada bucle en fila.

Espero que esto sea útil para las personas que prueban el procesamiento paralelo en R por primera vez como yo.

Referencias: http://www.r-bloggers.com/parallel-r-loops-for-windows-and-linux/ https://beckmw.wordpress.com/2014/01/21/a-brief-foray-into-parallel-processing-with-r/