How to switch programmatically between %do% and %dopar% in foreach?

foreach, parallel-foreach, r

Solution

You could use `ifelse` to choose the infix function:

runner <- function(parallel = FALSE) {
     `%myinfix%` <- ifelse(parallel, `%dopar%`, `%do%`)
     foreach(i=1:10) %myinfix% {
         print(i)
     } 
}

Problem

By changing %dopar% to %do% when using foreach, I can run the code sequentially. How can I do this programmatically? E.g. I want the following but with only ONE foreach statement: ``` library(doParallel) library(foreach) registerDoParallel(cores = 4) runner <- function(parallel = FALSE) { if (parallel) foreach(i=1:10) %dopar% { print(i) } else foreach(i=1:10) %do% { print(i) } } runner() runner(TRUE) ```

Original source