私は最近、いくつかのコアを備えたコンピューターを手に入れ、並列コンピューティングの使用法を学んでいます。私はかなり熟練していて、非常によく似た働きをする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
PSWindows7マシンなので使う必要があるparLapply
と思います