[R] Parallel processing question ...

Steve Lianoglou mailinglist.honeypot at gmail.com
Wed Feb 9 16:27:02 CET 2011


Hi David,

On Wed, Feb 9, 2011 at 10:11 AM, Robinson, David G <drobin at sandia.gov> wrote:
> Steve,
> Thanks for taking the time to look at the question. my apologies for the
> confusing post. In an attempt to keep the post short, I seem to have
> confused the issue.
>
> The variable of interest in each iteration is the vector lambda  and the
> goal is to collect all the lambda vectors and characterize the statistics of
> lambda over the course of the simulation (this is just a simply gibbs
> sampler) . In the series processing world I simply use cbind to accumulate
> the lambda vectors into an array called lambdas (as performed in  commented
> out  commands).
>
> What I am trying to do now is use a combination of foreach/dopar to do the
> same type of accumulation.
>
> I am not trying to capture any other variables from the loop except lambda.
> As you suggested, I have tried removing the .combine argument and simply
> collect the resulting list. Unfortunately, the lambda vectors don’t appear
> in the resulting list.

Ok, so let's take a look at your code again (without the commented block):

lambdas<- foreach(j=1:(2*burn_in), .combine=cbind) %dopar% {
   N <- update_N(min_sets, min_sets_indexes, lambda)
   lambda <- rgamma(K, shape=a+N, rate=bT)
   lambda
   if (j%%100==0) { print(j); print(lambda); print(N)}
}

Assuming you have all the vars defined properly. Note that your first
line in the loop passes a variable `lambda` into your update_N
function, then you reassign lambda to the result of your rgamma call.

I guess these two things are different, so why not name one of them
something else just in case (I've renamed it to LAMBDA below).

The last line of the block in your loop is an if-statement, which
essentially stops you from returning your lambda vector. Try:

lambdas<- foreach(j=1:(2*burn_in), .combine=cbind) %dopar% {
   N <- update_N(min_sets, min_sets_indexes, LAMBDA)
   lambda <- rgamma(K, shape=a+N, rate=bT)
   if (j%%100==0) { print(j); print(lambda); print(N)}
   lambda
}

-- 
Steve Lianoglou
Graduate Student: Computational Systems Biology
 | Memorial Sloan-Kettering Cancer Center
 | Weill Medical College of Cornell University
Contact Info: http://cbio.mskcc.org/~lianos/contact



More information about the R-help mailing list