parcumsum <- function(cls,x) { nWorkers <- length(cls) chunkRanges <- splitIndices(length(x),nWorkers) clusterApply(cls,chunkRanges, function(oneRange) myx <<- x[oneRange]) tmp <- clusterEvalQ(cls,cumsum(myx)) endValue <- function(x) x[length(x)] evs <- sapply(tmp,endValue) base <- evs[1] for (i in 2:nWorkers) { tmp[[i]] <- tmp[[i]] + base base <- base + evs[i] } Reduce(c,tmp) } test <- function() { library(parallel) cls <- makeCluster(2) x <- sample(1:5,10,replace=TRUE) print(x) print(parcumsum(cls,x)) } test()