2017-08-18 3 views
1

Je suis en train de réduire le temps d'exécution de mon code en utilisant package doParallel dans R.Comment exporter fonctions multiples ou paquets en boucle foreach dans « R »

J'appelle une fonction awareRateSIR que certains paquets supplémentaires sont utilisés dans le corps de cette fonction. Je reçois une erreur comme

could not find function "vcount" and..

Je sais que vcount est fonction du paquet igraph qui est utilisé dans awareRateSIR), mais ce n'est pas le seul. Comment puis-je résoudre ce problème? J'ai pensé que je devrais passer tous les noms de paquets qui sont utilisés dans ma fonction awareRateSIR mais je ne sais pas comment je ne peux pas exporter plusieurs fonctions dans foreach ou comment je peux exporter le nom de plusieurs paquets.

Ceci est mon code:

tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR", 
      .packages = "igraph", .packages="doParallel")%dopar%{ 
tp <- awareRateSIR(graphContact, graphCom,state) 
return(tp) 
} 

si je ne passe pas ces paquets que je vais obtenir des états d'erreur une fonction sont inconnues si je passe tous les paquets que je vais obtenir l'erreur:

Error in foreach(i = 1:iter, .inorder = FALSE, .export = "awareRateSIR", : formal argument ".packages" matched by multiple actual arguments"

merci à l'avance

Répondre

1

Vous devez passer tous les paquets nécessaires, en utilisant c fonction, comme ci-dessous:

tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR", 
      .packages = c("igraph", "doParallel"))%dopar%{ 
tp <- awareRateSIR(graphContact, graphCom,state) 
return(tp) 
} 
+0

Merci, les erreurs disparaissent – user3289235

0

Habituellement, vous n'avez pas besoin d'exporter une variable, une fonction ou un paquet lorsque vous utilisez foreach.

Pour les variables et les fonctions, ils doivent simplement être dans le même environnement que l'instruction foreach (le mieux est de faire une fonction où vous ne passez que ce dont vous avez besoin).

Lorsque des fonctions sont requises à partir d'autres packages, il suffit d'utiliser package::function, comme dans les packages.