2010-11-02 5 views
2

Un moyen de parallélisation dans R consiste à utiliser le package showfall. Pour envoyer des fonctions personnalisées aux utilisateurs, vous pouvez utiliser sfExport() (voir le message de Joris here).existe-t-il une autre façon de charger des paquets supplémentaires dans les travailleurs (calcul parallèle)?

J'ai une fonction personnalisée qui dépend des fonctions des paquets non-base qui ne sont pas chargés automatiquement. Ainsi, quand je cours ma fonction en parallèle, R craps car certaines fonctions ne sont pas disponibles (pensez aux paquets spatstat, splancs, sp ...). Jusqu'à présent, j'ai résolu ce problème en appelant library() dans ma fonction personnalisée. Cela charge les packages lors de la première exécution et ignore éventuellement les itérations suivantes. Pourtant, je me demandais s'il y avait une autre façon de dire à chaque employé de charger le paquet à la première itération et d'en finir (Ou est-ce qu'il me manque quelque chose et chaque itération commence comme une tabula rasa?).

Répondre

1

Il y a une commande spécifique pour cela dans les chutes de neige, sfLibrary(). Voir aussi? "Outils de chute de neige". Appeler la bibliothèque manuellement sur chaque noeud est fortement déconseillé. sfLibrary est essentiellement une enveloppe autour de la solution donnée par Dirk basée sur le paquet de neige.

3

Je ne comprends pas la question.

Les packages sont chargés via library(), et la plupart des fonctions d'exécution parallèle le prennent en charge. Par exemple, le paquet snow utilise

clusterEvalQ(cl, library(boot)) 

à (valeur de retour-à-dire non) « tranquillement » évaluer l'expression donnée --- ici un appel à library() --- sur chaque nœud. La plupart des cadres d'exécution parallèles ont quelque chose comme ça. Pourquoi, encore une fois, vous auriez besoin de quelque chose de différent, et qu'est-ce qui ne fonctionne pas ici exactement?

+0

Merci Dirk d'avoir pris le temps de regarder @ ma question. J'ai modifié le deuxième paragraphe et j'espère qu'il est plus clair maintenant ce que j'essaie d'accomplir. –

+0

Correct lors de l'utilisation de la neige, mais lors de l'utilisation de chutes de neige, il est fortement déconseillé d'appeler library() sur chaque noeud manuellement. La commande correcte pour cela est sfLibrary(), qui est essentiellement un wrapper autour de votre solution. –

+0

Je suppose qu'il y avait une raison pour laquelle je préférais la neige aux chutes de neige :) Cela correspond aussi mieux au framework doXXX et au paquet foreach. –

Questions connexes