используя parLapply параллельного интерфейса: невозможно получить доступ к переменным в параллельном коде

Недавно у меня был компьютер с несколькими ядрами, и я учусь использовать параллельные вычисления. Я довольно опытный сlapply и было сказаноparLapply работает очень похоже. Я не работаю правильно, хотя. Кажется, я должен явно поместить все вparLapply заставить его работать (то есть используемые функции, переменные и т. д.). Сlapply он читает из родительской среды иparLapply похоже, не делает этого. Так что в моем примере ниже я мог бы заставить все работать, поместив всю информацию внутриparLapply но если я использую это внутри определенной пользователем функции, я не могу явно указатьtext.var Внутри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)
    }
)

Как я могу пройтиtext.var, ntv, gc.rate, а такжеpos вparLapply без явного помещения их внутрь? (Я предполагаю, что вы как-то передаете их в виде списка)

PS Windows 7 машина, поэтому мне нужно использоватьparLapply Я думаю

Ответы на вопрос(3)

Ваш ответ на вопрос