usando el parLapply del paralelo: no se puede acceder a las variables dentro del código paralelo
Hace poco recibí una computadora con varios núcleos y estoy aprendiendo a usar computación paralela. Soy bastante competente conlapply
y me dijeronparLapply
Funciona de manera muy similar. Aunque no lo estoy haciendo correctamente. Parece que tengo que poner explícitamente todo dentro de laparLapply
para que funcione (es decir, funciones a utilizar, variables, etc.). Conlapply
Lee del entorno padre yparLapply
No parece hacer esto. Así que en mi ejemplo a continuación, podría hacer que todo funcione al colocar toda la información dentroparLapply
pero si uso esto dentro de una función definida por el usuario no puedo poner explícitamentetext.var
dentro deparLapply
.
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)
}
)
Como puedo pasartext.var
, ntv
, gc.rate
ypos
aparLapply
¿Sin ponerlos explícitamente dentro? (Supongo que los pasas como una lista de alguna manera)
PS Windows 7 máquina, así que necesito usarparLapply
Yo creo que