Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- suppressMessages(library(doParallel))
- library(itertools)
- set.seed(107)
- n <- 1000000
- m <- 10000
- td <- data.frame(val=rnorm(n), id=sample(m, n, replace=TRUE))
- cl <- makePSOCKcluster(4)
- registerDoParallel(cl)
- workers <- getDoParWorkers()
- vadd <- function(a, ...) {
- for (v in list(...))
- a <- a + v
- a
- }
- start <- proc.time()[3]
- res <- foreach(ids=isplitVector(unique(td$id), chunks=workers),
- .combine='vadd',
- .multicombine=TRUE,
- .inorder=FALSE) %dopar% {
- r <- rep(0, NROW(td))
- for (i in ids)
- r[td$id == i] <- mean(td$val[td$id != i])
- r
- }
- elapsed <- proc.time()[3] - start
- library(digest)
- cat(sprintf("foreach/doParallel/PSOCK with %d workers:\n", workers))
- cat(sprintf("Elapsed time: %f, MD5 hash: %s\n", elapsed, digest(res)))
Advertisement
Add Comment
Please, Sign In to add comment