en utilisant en parallèle du parLapply: impossible d'accéder à des variables au sein du code en parallèle
J'ai reçu récemment un ordinateur avec plusieurs cœurs et suis en train d'apprendre à utiliser l'informatique parallèle. Je suis assez compétent avec lapply
et on m'a dit parLapply
fonctionne de manière similaire. Je ne suis pas fonctionner correctement. Il semble que j'ai explicitement de tout mettre à l'intérieur de la parLapply
pour le faire fonctionner (c'est-fonctions à utiliser, variables, etc.). Avec lapply
elle se lit de la mère de l'environnement et de parLapply
ne semble pas le faire. Donc, dans mon exemple ci-dessous j'ai pu faire fonctionner le tout en plaçant toutes les infos à l'intérieur de parLapply
mais si je l'utiliser à l'intérieur d'une fonction définie par l'utilisateur, je ne peux pas explicitement mis text.var
à l'intérieur de parLapply
.
library(parallel)
text.var <- rep("I like cake and ice cream so much!", 20)
ntv <- length(text.var)
gc.rate <- 10
pos <- function(i) {
paste(sapply(strsplit(tolower(i), " "), nchar), collapse=" | ")
}
lapply(seq_len(ntv), function(i) {
x <- pos(text.var[i])
if (i%%gc.rate==0) gc()
return(x)
}
)
#doesn't work
cl <- makeCluster(mc <- getOption("cl.cores", 4))
parLapply(cl, seq_len(ntv), function(i) {
x <- pos(text.var[i])
if (i%%gc.rate==0) gc()
return(x)
}
)
#does work but have to specify all the stuff inside parLapply
cl <- makeCluster(mc <- getOption("cl.cores", 4))
parLapply(cl, seq_len(ntv), function(i) {
######stuff I have to put inside parLapply##########
text.var <- rep("I like cake and ice cream so much!", 20)
ntv <- length(text.var)
gc.rate <- 10
pos <- function(i) {
paste(sapply(strsplit(tolower(i), " "), nchar), collapse=" | ")
}
######stuff I have to put inside parLapply##########
x <- pos(text.var[i])
if (i%%gc.rate==0) gc()
return(x)
}
)
Comment puis-je passer text.var
, ntv
, gc.rate
, et pos
à parLapply
sans explicitement de les mettre à l'intérieur? (J'imagine que vous les passer comme une liste d'une certaine manière)
PS machine windows 7 donc j'ai besoin d'utiliser parLapply
je pense que
- J'ai fait un post de blog sur mon apprentissage avec cette pour de futurs chercheurs: trinkerrstuff.wordpress.com/2012/08/19/...
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'exporter les variables à l'autre R des processus dans le cluster:
Un autre méthode prévue par Martin Morgan serait de travailler ici.
Cette méthode fournit les objets de chaque nœud dans le cluster directement dans
parLapply
appel sans avoir besoin d'utiliser les armes à l'exportation: