usando parLapply paralela: incapaz de acessar variáveis dentro do código paralelo
Eu recentemente tenho um computador com vários núcleos e estou aprendendo a usar a computação paralela. Eu sou bastante proficiente comlapply
e foi ditoparLapply
funciona de forma muito semelhante. Eu não estou operando corretamente embora. Parece que tenho que colocar explicitamente tudo dentro doparLapply
para fazê-lo funcionar (isto é, funções a serem usadas, variáveis etc.). Comlapply
ele lê a partir do ambiente pai eparLapply
não parece fazer isso. Então, no meu exemplo abaixo eu poderia fazer tudo funcionar colocando todas as informações dentroparLapply
mas se eu usar isso dentro de uma função definida pelo usuário não posso colocar explicitamentetext.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 posso passartext.var
, ntv
, gc.rate
epos
paraparLapply
sem explicitamente colocá-los dentro? (Eu estou supondo que você passá-los como uma lista de alguma forma)
PS windows 7 máquina, então eu preciso usarparLapply
eu acho que