[R] Help with iteration using while loop

Steve Lianoglou mailinglist.honeypot at gmail.com
Fri Jun 4 20:14:30 CEST 2010


Code inline:

On Fri, Jun 4, 2010 at 1:30 PM, Subodh Acharya <shoebodh at gmail.com> wrote:
> Hello everyone,
>
> I am trying to use while loop to iterate a function until convergence. But I
> am having problem when I try to use a fixed number of iterations.
> Say I want to use maximum iteration of 150. If the value don't converge
> within maximum iteration, show warning of no convergence.
>
> Currently I don't have non- convergence problem so I think my code works
> fine. But in future I may encounter such problem that are likely to not
> converge easily.
>
> Below is my function that is working when I don't provide maximum iteration.
>
> iter<- function (Fpi, Time, tolerance){
> S = 22.4
> Ts = 0.499
> Ti = 0.25
> K = 0.044
> r<- 1.5
> M = Ts- Ti
> Ks = 0.044
>     Fpt = K*Time + M*S*log(1+ Fpi/(M*S))
>       while((Fpt-Fpi) > tolerance) {
>         Fpi = Fpt
>             Fpt = K*Time + M*S*log(1+ Fpi/(M*S))
>     Fp0 = Fpt
>    }
>  return(Fpt)
> }
> x<- iter(Fpi = 0.224, Time = 0.2, tolerance = 0.000001)

Add a counter variable and a second check in your `while` criteria:

...
...
iter <- 0
while (((Fpt - Fpi) > tolerance) && (iter < itermax)) {
  Fpi = Fpt
  Fpt = K*Time + M*S*log(1+ Fpi/(M*S))
  Fp0 = Fpt
  iter <- iter + 1
}

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