[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