174 lines
5.2 KiB
R
174 lines
5.2 KiB
R
## ----loadLibs-----------------------------------------------------------------
|
|
library(foreach)
|
|
|
|
## ----ex1----------------------------------------------------------------------
|
|
x <- foreach(i=1:3) %do% sqrt(i)
|
|
x
|
|
|
|
## ----ex2----------------------------------------------------------------------
|
|
x <- foreach(a=1:3, b=rep(10, 3)) %do% (a + b)
|
|
x
|
|
|
|
## ----ex3----------------------------------------------------------------------
|
|
x <- foreach(a=1:3, b=rep(10, 3)) %do% {
|
|
a + b
|
|
}
|
|
x
|
|
|
|
## ----ex4----------------------------------------------------------------------
|
|
x <- foreach(a=1:1000, b=rep(10, 2)) %do% {
|
|
a + b
|
|
}
|
|
x
|
|
|
|
## ----ex5----------------------------------------------------------------------
|
|
x <- foreach(i=1:3, .combine='c') %do% exp(i)
|
|
x
|
|
|
|
## ----ex6----------------------------------------------------------------------
|
|
x <- foreach(i=1:4, .combine='cbind') %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex7----------------------------------------------------------------------
|
|
x <- foreach(i=1:4, .combine='+') %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex7.1--------------------------------------------------------------------
|
|
cfun <- function(a, b) NULL
|
|
x <- foreach(i=1:4, .combine='cfun') %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex7.2--------------------------------------------------------------------
|
|
cfun <- function(...) NULL
|
|
x <- foreach(i=1:4, .combine='cfun', .multicombine=TRUE) %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex7.3--------------------------------------------------------------------
|
|
cfun <- function(...) NULL
|
|
x <- foreach(i=1:4, .combine='cfun', .multicombine=TRUE, .maxcombine=10) %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex7.4--------------------------------------------------------------------
|
|
foreach(i=4:1, .combine='c') %dopar% {
|
|
Sys.sleep(3 * i)
|
|
i
|
|
}
|
|
foreach(i=4:1, .combine='c', .inorder=FALSE) %dopar% {
|
|
Sys.sleep(3 * i)
|
|
i
|
|
}
|
|
|
|
## ----ex8----------------------------------------------------------------------
|
|
library(iterators)
|
|
x <- foreach(a=irnorm(4, count=4), .combine='cbind') %do% a
|
|
x
|
|
|
|
## ----ex9----------------------------------------------------------------------
|
|
set.seed(123)
|
|
x <- foreach(a=irnorm(4, count=1000), .combine='+') %do% a
|
|
x
|
|
|
|
## ----ex10---------------------------------------------------------------------
|
|
set.seed(123)
|
|
x <- numeric(4)
|
|
i <- 0
|
|
while (i < 1000) {
|
|
x <- x + rnorm(4)
|
|
i <- i + 1
|
|
}
|
|
x
|
|
|
|
## ----ex11---------------------------------------------------------------------
|
|
set.seed(123)
|
|
x <- foreach(icount(1000), .combine='+') %do% rnorm(4)
|
|
x
|
|
|
|
## ----ex12.data----------------------------------------------------------------
|
|
x <- matrix(runif(500), 100)
|
|
y <- gl(2, 50)
|
|
|
|
## ----ex12.load----------------------------------------------------------------
|
|
library(randomForest)
|
|
|
|
## ----ex12.seq-----------------------------------------------------------------
|
|
rf <- foreach(ntree=rep(250, 4), .combine=combine) %do%
|
|
randomForest(x, y, ntree=ntree)
|
|
rf
|
|
|
|
## ----ex12.par-----------------------------------------------------------------
|
|
rf <- foreach(ntree=rep(250, 4), .combine=combine, .packages='randomForest') %dopar%
|
|
randomForest(x, y, ntree=ntree)
|
|
rf
|
|
|
|
## ----ex13.orig----------------------------------------------------------------
|
|
applyKernel <- function(newX, FUN, d2, d.call, dn.call=NULL, ...) {
|
|
ans <- vector("list", d2)
|
|
for(i in 1:d2) {
|
|
tmp <- FUN(array(newX[,i], d.call, dn.call), ...)
|
|
if(!is.null(tmp)) ans[[i]] <- tmp
|
|
}
|
|
ans
|
|
}
|
|
applyKernel(matrix(1:16, 4), mean, 4, 4)
|
|
|
|
## ----ex13.first---------------------------------------------------------------
|
|
applyKernel <- function(newX, FUN, d2, d.call, dn.call=NULL, ...) {
|
|
foreach(i=1:d2) %dopar%
|
|
FUN(array(newX[,i], d.call, dn.call), ...)
|
|
}
|
|
applyKernel(matrix(1:16, 4), mean, 4, 4)
|
|
|
|
## ----ex13.second--------------------------------------------------------------
|
|
applyKernel <- function(newX, FUN, d2, d.call, dn.call=NULL, ...) {
|
|
foreach(x=iter(newX, by='col')) %dopar%
|
|
FUN(array(x, d.call, dn.call), ...)
|
|
}
|
|
applyKernel(matrix(1:16, 4), mean, 4, 4)
|
|
|
|
## ----ex13.iter, results="hide"------------------------------------------------
|
|
iblkcol <- function(a, chunks) {
|
|
n <- ncol(a)
|
|
i <- 1
|
|
|
|
nextElem <- function() {
|
|
if (chunks <= 0 || n <= 0) stop('StopIteration')
|
|
m <- ceiling(n / chunks)
|
|
r <- seq(i, length=m)
|
|
i <<- i + m
|
|
n <<- n - m
|
|
chunks <<- chunks - 1
|
|
a[,r, drop=FALSE]
|
|
}
|
|
|
|
structure(list(nextElem=nextElem), class=c('iblkcol', 'iter'))
|
|
}
|
|
nextElem.iblkcol <- function(obj) obj$nextElem()
|
|
|
|
## ----ex13.third---------------------------------------------------------------
|
|
applyKernel <- function(newX, FUN, d2, d.call, dn.call=NULL, ...) {
|
|
foreach(x=iblkcol(newX, 3), .combine='c', .packages='foreach') %dopar% {
|
|
foreach(i=1:ncol(x)) %do% FUN(array(x[,i], d.call, dn.call), ...)
|
|
}
|
|
}
|
|
applyKernel(matrix(1:16, 4), mean, 4, 4)
|
|
|
|
## ----when---------------------------------------------------------------------
|
|
x <- foreach(a=irnorm(1, count=10), .combine='c') %:% when(a >= 0) %do% sqrt(a)
|
|
x
|
|
|
|
## ----qsort--------------------------------------------------------------------
|
|
qsort <- function(x) {
|
|
n <- length(x)
|
|
if (n == 0) {
|
|
x
|
|
} else {
|
|
p <- sample(n, 1)
|
|
smaller <- foreach(y=x[-p], .combine=c) %:% when(y <= x[p]) %do% y
|
|
larger <- foreach(y=x[-p], .combine=c) %:% when(y > x[p]) %do% y
|
|
c(qsort(smaller), x[p], qsort(larger))
|
|
}
|
|
}
|
|
|
|
qsort(runif(12))
|
|
|