[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