2011-07-29 6 views
7

Cada vez que veo una pregunta sobre el procesamiento paralelo en R, utiliza la función foreach. Como los bucles for no son muy parecidos a R, ¿existe una versión paralela de apply? De ser así, ¿por qué no es más popular?¿Las extensiones paralelas R rompen la metáfora `aplicar`?

+0

En mi caso, el atractivo de 'foreach' es que me permite pasar más de una variable a la función, elegir cómo ensamblar los resultados y es más legible que los equivalentes' apply'. Sin embargo, no sé cómo se comparan en términos de velocidad. – Backlin

+0

@Backlin: Pero las mismas críticas podrían hacerse de 'for' vs.' apply' (las versiones no paralelas), y las personas discuten a gritos por la familia apply. Es tan estilo como algo de velocidad ... –

Respuesta

9

Existen numerosas versiones paralelas de *apply, empezando por

  • parLapply() en la nieve
  • mclapply() en múltiples núcleos
  • mpi.apply() en RPMI

, así como paquetes dedicados tales como papply (posiblemente ya no se mantenga).

+0

¿Son tan fáciles de usar que nadie hace preguntas sobre ellos entonces? :-) Tal vez solo han sido las últimas semanas, pero ha habido bastantes preguntas foreach y ninguna sobre esto. La búsqueda de estos tres en SO arroja resultados solo para mclapply(), y luego no tantos. –

+0

Puede comenzar con un documento de encuesta como, por ejemplo, [este en JSS] (http://www.jstatsoft.org/v31/i01/paper). –

+0

Ese es un documento práctico. –

1

@Dirk es correcto. Añadiría que el paquete plyr ahora tiene soporte para un back-end paralelo.

En el caso del paquete plyr, puede darse el caso de que poco se menciona porque caer en un backend paralelo no toma ningún pensamiento: es sólo una bandera.

+0

Creo que puede tener razón en que no recibe ninguna mención porque simplemente funciona. ¿Por qué no funciona de la misma manera con aplicar? En última instancia, parece ser la metáfora correcta: deje que las bibliotecas manejen la paralelización y todo lo que tiene que hacer el usuario es decidir si desea que se ejecute en paralelo o no ... –

+0

Pragmáticamente hablando, algunas de estas funciones son bastante nuevas y las personas simplemente comenzando a adoptarlo. – Iterator

+0

Sí, pero foreach parece ser el más nuevo de ellos y es el que recibe toda la atención ... –

Cuestiones relacionadas