problem with while loop with next (was RE: [R] file connection, w hile, readLines and browser)

Liaw, Andy andy_liaw at merck.com
Tue Oct 2 20:54:16 CEST 2001


Dear R-help,

I think I have kinda isolated the problem I had to the following:

i <- 0
while( {i <- i + 1} < 5) {
  if(i < 3) next
  print(i)
}

This seems to go into an infinite loop.  After I break the execution, i has
the value 1.

At the R prompt, if I start from i <- 0 and keep typing {i <- i + 1} < 5, it
eventually evaluate to TRUE.  So why does the while loop not work?

(BTW, the same while loop runs as I expected in Splus 6.0.3 on WinNT.)

Any hints?  I'd really appreciate the help!

Cheers,
Andy


> -----Original Message-----
> From: Liaw, Andy [mailto:andy_liaw at merck.com]
> Sent: Tuesday, October 02, 2001 10:30 AM
> To: 'Robert Gentleman'
> Cc: r-help (E-mail)
> Subject: An example (was RE: [R] file connection, while, readLines and
> bro wser)
> 
> 
> Prof. Gentleman (and R-help),
> 
> Here's an example of what didn't work.  I still don't understand why.
> 
> Function:
> trycon <- function(file, n) {
>   f.con <- file(file, open="rt")
>   on.exit(close(f.con))
>   i <- 0
>   while( length(readln <- readLines(f.con, 1)) > 0 ) {
>     x <- unlist(strsplit(readln, " "))
>     if(length(x) <= 6 && x[3] == x[4]) next
>     i <- i + 1
>   }
>   return(invisible())
> }
> 
> Data file:
> 1 0.00 ABC ABC 1.00 0 
> 2 0.00 DEF DEF 1.00 0 CDE 1.00 0 XYZ 0.72 0 
> 3 0.00 abc abc 1.00 0 ghi 1.00 0 stu 0.72 0 lmn 0.80 0 
> 
> R call:
> trycon("C:/home/data.txt", 4)
> Error in while (length(readln <- readLines(f.con, 1)) > 0) { : 
> 	missing value where logical needed
> 
> The "if(...) next" line seems to be the source of the 
> problem, but the error
> message and the behaviour of browser() really throw me off.  
> Can you shed
> some light on this?  (I have a hunch that I'm missing something *real*
> obvious...)
> 
> Regards,
> Andy
> 
> 
> 
> > -----Original Message-----
> > From: Robert Gentleman [mailto:rgentlem at jimmy.harvard.edu]
> > Sent: Tuesday, October 02, 2001 9:50 AM
> > To: Liaw, Andy
> > Subject: Re: [R] file connection, while, readLines and browser
> > 
> > 
> > On Tue, Oct 02, 2001 at 09:28:49AM -0400, Liaw, Andy wrote:
> > > Dear R-help,
> > > 
> > > I have one more question about the functions mentioned in 
> > the subject.
> > > Again, the system info is:
> > > platform i386-pc-mingw32
> > > arch     x86            
> > > os       Win32          (OK, it's NT4sp6)
> > > system   x86, Win32     
> > > status                  
> > > major    1              
> > > minor    3.1            
> > > year     2001           
> > > month    08             
> > > day      31             
> > > language R              
> > > 
> > > I defined a function like the following:
> > > 
> > > myfun <- function(file, maxline) {
> > >   f.con <- file(file, open="rt")
> > >   on.exit(close(f.con))
> > >   while(length(readln <- readLines(f.con, 1)) > 0 ) {
> > >     ## Do something with readln...
> > >   }
> > >   ## Do something more...
> > > }
> > > 
> > > This didn't work for me.  It gave me an error at the while 
> > statement, saying
> > > "NA where logical needed".  I inserted a browser() right 
> > inside the while
> > > loop and have it step through the function.  It seems to be 
> > stuck at the
> > > first line of the file and never move down.  This behaviour 
> > is different
> > > from the call without the browser().  Anyone has ideas why 
> > this is the case?
> > > 
> > 
> >  It seems to work for me. Are you sure that's what you did? 
> It is best
> >  not to edit anything, get a simple example that shows the error and
> >  post that. It makes for a lot less work for those of us that are
> >  willing to look at it and it makes sure that we find the 
> problem that
> >  you are having.
> > 
> > 
> > > What had worked for me is something like the following:
> > >   repeat {
> > >     readln <- readLines(f.con, 1)
> > >     if(length(readln) == 0) break
> > >     ## do something...
> > >   }
> > > 
> > > Any suggestions are greatly appreciated.
> > > 
> > > Regards,
> > > Andy
> > > 
> > > 
> > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
> > -.-.-.-.-.-.-.-.-
> > > r-help mailing list -- Read 
> > http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> > > Send "info", "help", or "[un]subscribe"
> > > (in the "body", not the subject !)  To: 
> > r-help-request at stat.math.ethz.ch
> > > 
> > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
> > _._._._._._._._._
> > 
> > -- 
> > +-------------------------------------------------------------
> > --------------+
> > | Robert Gentleman                 phone : (617) 632-5250     
> >               |
> > | Associate Professor              fax:   (617)  632-2444     
> >               |
> > | Department of Biostatistics      office: M1B28
> > | Harvard School of Public Health  email: 
> > rgentlem at jimmy.dfci.harvard.edu   |
> > +-------------------------------------------------------------
> > --------------+
> > 
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
> -.-.-.-.-.-.-.-.-
> r-help mailing list -- Read 
http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
_._

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list