clusterSetRNGStream , . , , , clusterApply . , , , , .
. , nextRNGSubStream:
library(parallel)
getseeds <- function(ntasks, iseed) {
RNGkind("L'Ecuyer-CMRG")
set.seed(iseed)
seeds <- vector("list", ntasks)
seeds[[1]] <- .Random.seed
for (i in seq_len(ntasks - 1)) {
seeds[[i + 1]] <- nextRNGSubStream(seeds[[i]])
}
seeds
}
clusterSetRNGStream, "L'Ecuyer-CMRG" :
cl <- makeCluster(detectCores())
clusterEvalQ(cl, { library(MASS); RNGkind("L'Ecuyer-CMRG") })
".Random.seed" , :
worker <- function(nstart, seed, centers=4) {
assign(".Random.seed", seed, envir=.GlobalEnv)
kmeans(Boston, centers, nstart = nstart)
}
nstart seed, clusterMap clusterApply :
n <- 4
nstarts <- rep(25, n)
seeds <- getseeds(n, 1234)
results <- clusterMap(cl, worker, nstarts, seeds)
, :
itasks <- c(4)
results <- clusterMap(cl, worker, nstarts[itasks], seeds[itasks])
, clusterMap .scheduling="dynamic", , , clusterSetRNGStream.
, clusterMap MoreArgs, centers worker:
results <- clusterMap(cl, worker, nstarts, seeds, MoreArgs=list(centers=5))