Hi Steve,

Thanks for your response.  The slight issue is that I need to use a different 
starting seed for each simulation.  If I use 'lapply' then I end up using the 
same seed each time.  (By contrast, I need to be able to specify which starting 
seed I am using).

Thanks,
Laura

-----Original Message-----
From: Steve Lianoglou [mailto:mailinglist.honey...@gmail.com] 
Sent: 15 September 2011 16:17
To: Bonnett, Laura
Cc: r-help@r-project.org
Subject: Re: [R] Where to put tryCatch or similar in a very big for loop

Hi Laura,

On Thu, Sep 15, 2011 at 10:53 AM, Bonnett, Laura
<l.j.bonn...@liverpool.ac.uk> wrote:
> Dear all,
>
> I am running a simulation study to test variable imputation methods for Cox 
> models using R 2.9.0 and Windows XP.  The code I have written (which is 
> rather long) works (if I set nsim = 9) with the following starting values.
>
>>bootrs(nsim=9,lendevdat=1500,lenvaldat=855,ac1=-0.19122,bc1=-0.18355,cc1=-0.51982,cc2=-0.49628,eprop1=0.98,eprop2=0.28,lda=0.003)
>
> I need to run the code 1400 times in total (bootstrap resampling) however, 
> occasionally the random numbers generated lead to a singularity and hence the 
> code crashes as one of the Cox model cannot be fitted (the 10th iteration is 
> the first time this happens).
>
> I've been trawling the internet for ideas and it seems that there are several 
> options in the form of try() or tryCatch() or next.  I'm not sure however, 
> how to include them in my code (attached).  Ideally I'd like it to run 
> everything simulation from 1 to 1400 and if there is an error at some point 
> get an error message returned (I need to count how many there are) but move 
> onto the next number in the loop.
>
> I've tried putting try(....,silent=TRUE) around each cox model (cph 
> statement) but that hasn't work and I've also tried putting try around the 
> whole for loop without any success.

Let's imagine you are using an `lapply` instead of `for`, only because
I guess you want to store the results of `bootrs` somewhere, you can
adapt this to your `for` solution. I typically return NULL when an
error is caught, then filter those out from my results, or whatever
you like:

results <- lapply(1:1400, function(i) {
  tryCatch(bootrs(...whatever...), error=function(e) NULL)
})
went.south <- sapply(results, is.null)

The `went.south` vector will be TRUE where an error occurred in your
bootrs call.

HTH,
-steve

-- 
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

______________________________________________
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.

Reply via email to