[R] crazy loop error.

Erik Iverson eriki at ccbr.umn.edu
Mon Jan 24 19:50:27 CET 2011


Roy,

I have no idea what you're actually trying to do here, but
it looks like there would be a more natural R'ish way if
you're concerned about grouping consecutive elements of 'a'.

At any rate, within your while loop, you're incrementing n by
1, and eventually n will be 10, which will be transformed to
11 when you add 1 to it, and a[11] will be NA, thus the error
you receive...


Roy Mathew wrote:
> Dear R-users,
> This is a loop which is part of a bigger script. I managed to isolate the
> error in this loop and simplified it to the bare minimum and made it
> self-contained.
> 
> a<-c(2,3,4,5,5,5,6,6,6,7)
> 
> for(n in 1:10)
> {
> print(paste("n: ",n))
> z1<-a[n]
> #make a list container
> ldata<-list()
> t=1
> 
> while(z1==a[n])
> {
> 
> #add dataframes to list
> ldata[[t]]<-paste("hello")
> 
> n=n+1
> t=t+1
> 
> }
> print("------End of while loop-------")
> 
> for(y in 1:length(ldata))
> {
> print(ldata[[y]])
> }
> 
> print(paste("n: ",n))
> print("******End of for loop********")
> }
> 
> 
> This script has a vector "a", for-loop, and a nested while-loop.
> The for-loop runs from 1 to length of a. At every number of a, it enters the
> while-loop and a hello is saved into list ldata.
> If the next number in the vector a is a different number from previous then
> the while-loop is exited and saved hello is printed.
> If the next number in vector a is same as before then it loops inside the
> while-loop and several hellos are printed together.
> 
> Then run-time error is
> 
> Error in while (z1 == a[n]) { : missing value where TRUE/FALSE needed
> 
> Thats because an NA creeps in somewhere. The problem can be seen far before
> that. The full output from the run is below.
> A lot of stuff was printed to help with the debugging. At n=4, there are
> three repeats of 5, therefore hello is printed 3 times. n then becomes 7.
> Then when the for-loop returns to top, n miraculously becomes 5. Hows
> that!!?? Then on, everything goes wrong. I cannot figure out the problem.
> 
> [1] "n:  1"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "n:  2"
> [1] "******End of for loop********"
> [1] "n:  2"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "n:  3"
> [1] "******End of for loop********"
> [1] "n:  3"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "n:  4"
> [1] "******End of for loop********"
> [1] "n:  4"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "hello"
> [1] "hello"
> [1] "n:  7"
> [1] "******End of for loop********"
> [1] "n:  5"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "hello"
> [1] "n:  7"
> [1] "******End of for loop********"
> [1] "n:  6"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "n:  7"
> [1] "******End of for loop********"
> [1] "n:  7"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "hello"
> [1] "hello"
> [1] "n:  10"
> [1] "******End of for loop********"
> [1] "n:  8"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "hello"
> [1] "n:  10"
> [1] "******End of for loop********"
> [1] "n:  9"
> [1] "------End of while loop-------"
> [1] "hello"
> [1] "n:  10"
> [1] "******End of for loop********"
> [1] "n:  10"
> Error in while (z1 == a[n]) { : missing value where TRUE/FALSE needed
> 
> Mr Stuck-up.....
> Thanks for any help.
> Roy
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list