I believe I now see the light vis-à-vis iterators when combined with foreach() calls in R. I have now been able to reduce computational workload to minutes instead of hours. I want to verify that the way I am using them is "safe". By safe I mean does the iterator traverse elements in the same way as I have below in my toy example to illustrate what I mean.
In the first "traditional" example, I have only one index variable for the loop and so I know that the same list in r1 and r2 are always being grabbed. That is, in iteration 1 it is guaranteed to use r1[[1]] + r2[[1]]. In the example that uses the iterators, is this also guaranteed even though I now have two iterator objects? That is, will the index for element i always be the same as the index for element j when using this across many different cores? It seems to be true and in all my test cases so far I am seeing it to be true. But, that could be just luck, so I wonder if there is a condition under which that would NOT be true. Thank you Harold library(foreach) library(doParallel) cl <- makeCluster(2) registerDoParallel(cl) ### Create random data r1 <- vector("list", 20) for(i in 1:20){ r1[[i]] <- rnorm(10) } ### Create random data r2 <- vector("list", 20) for(i in 1:20){ r2[[i]] <- rnorm(10) } ### Use a for loop traditionally result1 <- vector("list", 20) for(i in 1:20){ result1[[i]] <- r1[[i]] + r2[[i]] } ### Use iterators itx1 <- iter(r1) itx2 <- iter(r2) result2 <- foreach(i = itx1, j = itx2) %dopar% { i + j } all.equal(result1, result2) ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.