Hi David, Thanks for the help. It's working! I still find it to be a new concept. I haven't encountered storing loops in objects in any other languages. Can it even be done in other languages? Very novel, quite intriguing.
Thanks again, Vivek On Thu, Apr 29, 2010 at 3:44 PM, David M Smith <da...@revolution-computing.com> wrote: > [This relates to the foreach function in library(foreach)] > > Vivek, > > In the %dopar% example, the assignments are being made into "child" R > sessions in parallel. foreach is generally pretty good about detecting > variables you reference in the parallel loops and making sure the > objects are copied over to the parent, but in this case where you're > using "assign" directly, it doesn't detect that test_1.25 and > tets_1.50 are variables you're modifying in parallel. (In the %do% > case everything is run in the same R session, so the assignments are > naturally preserved.) > > Also, in general, think of foreach more of an analogue to "lapply" > than to "for", in the sense that you're running it to collect the > values of the body of the loop, not for their side effects. > > So what you probably really want is code like this: > > test <- foreach(i = c(1.25, 1.50)) %dopar% some_timeconsuming_operation(i) > > and then (if you really need the variables named as specified) > > v <- c(1,25,1.50) > for (i in seq(along=v)) assign(paste("test_",v[i],sep=""),test[[i]]) > > In your specific example, > > some_timeconsuming_function <- function(i) i > > but that's not timeconsuming, and so you're not going to get any > benefit from parallelization. > > # David Smith > > > On Thu, Apr 29, 2010 at 2:07 PM, Vivek Ayer <vivek.a...@gmail.com> wrote: >> Hi guys, >> >> I was wondering why this piece of code doesn't work: >> >> foreach (i = c(1.25,1.50)) %dopar% { >> assign(paste("test_",i,sep=""),i) >> } >> >> but, this does: >> >> foreach (i = c(1.25,1.50)) %do% { >> assign(paste("test_",i,sep=""),i) >> } >> >> Obviously, the difference is %dopar% vs. %do%. If I use %do%, I get >> objects test_1.25 and test_1.50, but I don't get these objects if I >> use %dopar% even though it seemed to run through the loop in parallel. >> >> Thanks in advance, >> Vivek >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > > > -- > David M Smith <da...@revolution-computing.com> > VP of Marketing, REvolution Computing http://blog.revolution-computing.com > Tel: +1 (650) 330-0553 x205 (Palo Alto, CA, USA) > > Download REvolution R free: > www.revolution-computing.com/downloads/revolution-r.php > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.