Dear Renaud, Thank you for the report. I see that Steve Weston has responded to your cross-posting on r-sig-hpc; I hope this helps with your immediate problem. We will investigate whether changes to doMC are warranted.
Regards, Rich Calaway On Tue, Jun 28, 2011 at 2:58 AM, Renaud Gaujoux <ren...@cbio.uct.ac.za>wrote: > Hi, > > this post is about foreach operators, the compiler package and the last > update of doMC that includes support for the compiler functionality. > > I am using a home-made %dopar%-like operator that adds some custom > expression to be executed before the foreach loop expression itself (see > sample code below). > It used to work perfectly with doMC 1.2.1, but with the introduction of the > compiler functionality, things do not work properly. > The change in the doMC package consists in evaluating a compiled expression > instead of the original R expression: > > # from doMC:::doMC ... > c.expr <- comp(expr, env = envir, options = list(suppressUndefined = TRUE)) > > and for R >= 2.13.0 comp is defined as compiler::compile: > function (e, env = .GlobalEnv, options = NULL) > { > cenv <- makeCenv(env) > cntxt <- make.toplevelContext(cenv, options) > cntxt$env <- addCenvVars(cenv, findLocals(e, cntxt)) > genCode(e, cntxt) > } > <environment: namespace:compiler> > > My guess is that the function findLocals or genCode can not handle a > 2-length expression vector. > > Maybe somebody who knows the internals of these functions could explain > better this behaviour? > How can I concatenate two expressions into a single one? > > Thank you, > Renaud > > > ##############################**#################### > # Sample code > ##############################**#################### > > `%dopar2%` <- function(obj, ex){ > > # append custom code to the expression > ex <- c(expression({ a <- i; message("Custom ", a);}), substitute(ex)) > > # call the standard %dopar% operator > do.call(`%dopar%`, list(obj, ex), envir=parent.frame() ) > } > res <- foreach(i=1:3) %dopar2% { print(i); i*2; } > res > > > ######################### > # Output with doSEQ or doMC 1.2.1 > ######################### > Custom 1 > [1] 1 > Custom 2 > [1] 2 > Custom 3 > [1] 3 > > res > [[1]] > [1] 2 > > [[2]] > [1] 4 > > [[3]] > [1] 6 > > > ######################### > # Output with doMC 1.2.2 > ######################### > > [[1]] > expression({ > a <- i > message("Custom ", a) > }, { > print(i) > i * 2 > }) > > [[2]] > expression({ > a <- i > message("Custom ", a) > }, { > print(i) > i * 2 > }) > > [[3]] > expression({ > a <- i > message("Custom ", a) > }, { > print(i) > i * 2 > }) > > > > -- > Renaud Gaujoux > Computational Biology - University of Cape Town > South Africa > > > > > ### > UNIVERSITY OF CAPE TOWN > This e-mail is subject to the UCT ICT policies and e-mail disclaimer > published on our website at http://www.uct.ac.za/about/** > policies/emaildisclaimer/<http://www.uct.ac.za/about/policies/emaildisclaimer/>or > obtainable from +27 21 650 9111. This e-mail is intended only for the > person(s) to whom it is addressed. If the e-mail has reached you in error, > please notify the author. If you are not the intended recipient of the > e-mail you may not use, disclose, copy, redirect or print the content. If > this e-mail is not related to the business of UCT it is sent by the sender > in the sender's individual capacity. > > ### > > > -- Rich Calaway Documentation Manager Revolution Analytics, Inc. 1505 Westlake Ave North Suite 300 Seattle, WA 98109 richcala...@revolutionanalytics.com 206-456-6086 (Direct Phone) 855-GET-REVO x6086 (Toll-free) [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel