[R-sig-hpc] programmatically shift between %do% and %dopar% in foreach?

Simon Urbanek simon.urbanek at r-project.org
Tue Jan 8 18:05:02 CET 2013


On Jan 8, 2013, at 11:40 AM, Max Kuhn wrote:

> I'd like to have the option of using foreach but be able to restrict
> processing to be parallel in one of my packages.
> 
> I'd rather not have
> 
>   x <- if(goParallel) foreach(stuff) %dopar% foo else foreach(stuff) %do%
> foo
> 
> Also, the function is nested within layers that conduct parallel processing
> (i.e. the foo above might also use dopar inside) and my impression is
> that registerDoSEQ would shut down parallel processing for both functions.
> 
> It looks like %do% and %dopar% are not existing objects:
> 
>> str(%do%)
>   Error: unexpected SPECIAL in "str(%do%"
> 

They are simply functions - you just forgot to quote it:

> str(`%do%`)
function (obj, ex)  

%...% are binary infix operators so if you use them as a symbol, you have to quote them.


> Otherwise I would add some conditional logic to switch between them such as
> 
>   operator <- if(goParallel) %dopar% else %do%
>    x <- foreach(stuff) operator foo
> 

It works, but if you want to keep the infix notation you have to use something like

`%op%` <- if (goParallel) `%dopar%` else `%do%`

otherwise for your suggestion you'd have to use the functional form:

operator(foreach(stuff), foo)

Cheers,
Simon


> Thanks,
> 
> Max
> 
>> sessionInfo()
> R version 2.15.2 (2012-10-26)
> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
> 
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
> 
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
> 
> other attached packages:
> [1] foreach_1.4.0
> 
> loaded via a namespace (and not attached):
> [1] codetools_0.2-8 iterators_1.0.6
> 
> 	[[alternative HTML version deleted]]
> 
> _______________________________________________
> R-sig-hpc mailing list
> R-sig-hpc at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-hpc
> 
> 



More information about the R-sig-hpc mailing list