2011-08-29 9 views
14

De forma predeterminada (sin .combine), foreach /% dopar% devuelve resultados en una lista. ¿Se garantiza que el orden de los resultados en la lista coincide con el orden del bucle/iteración? En otras palabras, ¿el orden será el mismo que cuando se itera secuencialmente? O ¿la lista se llena cuando se completa una tarea paralela? Al examinar la documentación, veo que hay un parámetro .inorder, pero parece aplicarse solo cuando se usa una función .combine.foreach% dopar% - ¿garantía por orden de resultados?

Respuesta

21

Cuando finaliza la llamada, el resultado de foreach estará en el mismo orden que para un bucle 'normal'. Sin embargo, no hay garantía para el orden en el que 'llegan': en teoría (y al paralelizar, también en la práctica), el primer elemento podría completarse más tarde que el segundo.

Por lo tanto, no tiene garantía sobre el orden de ejecución (por ejemplo, las barras de progreso o el registro pueden ser improvisados), pero puede estar seguro de que los resultados serán los que espera.

+1

Nick - ¡gracias! Aprecié la distinción entre el orden de ejecución y el orden de los resultados – SFun28

Cuestiones relacionadas