The foreach
package brings the power of parallel processing to R. But before you want to use multi core CPUs you have to assign a multi core cluster. The doSNOW
package is one possibility.
A simple use of the foreach loop is to calculate the sum of the square root and the square of all numbers from 1 to 100000.
library(foreach)
library(doSNOW)
cl <- makeCluster(5, type = "SOCK")
registerDoSNOW(cl)
f <- foreach(i = 1:100000, .combine = c, .inorder = F) %dopar% {
k <- i ** 2 + sqrt(i)
k
}
The structure of the output of foreach
is controlled by the .combine
argument. The default output structure is a list. In the code above, c
is used to return a vector instead. Note that a calculation function (or operator) such as "+"
may also be used to perform a calculation and return a further processed object.
It is important to mention that the result of each foreach-loop is the last call. Thus, in this example k
will be added to the result.
Parameter | Details |
---|---|
.combine | combine Function. Determines how the results of the loop are combined. Possible values are c , cbind , rbind , "+" , "*" ... |
.inorder | if TRUE the result is ordered according to the order of the iteration vairable (here i ). If FALSE the result is not ordered. This can have postive effects on computation time. |
.packages | for functions which are provided by any package except base , like e.g. mass , randomForest or else, you have to provide these packages with c("mass", "randomForest") |