używając parLapply równoległego: nie można uzyskać dostępu do zmiennych w kodzie równoległym

Niedawno dostałem komputer z kilkoma rdzeniami i uczę się korzystać z obliczeń równoległych. Jestem dość sprawnylapply i powiedziano miparLapply działa bardzo podobnie. Nie działam jednak prawidłowo. Wydaje się, że muszę wyraźnie umieścić wszystko w środkuparLapply aby to działało (czyli funkcje, które mają być używane, zmienne itp.). Zlapply czyta ze środowiska macierzystego iparLapply nie robi tego. W poniższym przykładzie mogłem sprawić, by wszystko działało, umieszczając wszystkie informacje wewnątrzparLapply ale jeśli użyję tego w funkcji zdefiniowanej przez użytkownika, nie mogę go jawnie umieścićtext.var wnętrzeparLapply.

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)
    }
)

Jak mogę przejśćtext.var, ntv, gc.rate, ipos doparLapply bez wyraźnego umieszczenia ich w środku? (Zgaduję, że w jakiś sposób podajesz je jako listę)

PS Windows 7 maszyna, więc muszę użyćparLapply Myślę

questionAnswers(3)

yourAnswerToTheQuestion