Недавно я получил компьютер с несколькими ядрами и изучаю использование параллельных вычислений. Я достаточно разбираюсь в 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 machine, поэтому мне нужно использовать parLapply
Я думаю