On Mon, Jan 24, 2011 at 11:18:35PM +0100, Roy Mathew wrote: > Thanks for the reply Erik, As you mentioned, grouping consecutive elements > of 'a' was my idea. > I am unaware of any R'ish way to do it. It would be nice if someone in the > community knows this. > > The error resulting in the NA was pretty easy to fix, and my loop works, but > the results are still wrong (new script below). > Ideally it should print single "hello" for the single letters and grouped '3 > hellos' for the fives, grouped '2 hellos' for the sixes etc. > > Based on the run results, if the value of n is being tracked, it changes > quite unpredictably. > Can someone explain how the value of n changes from end of the loop to the > top without anything being done to it?
Hi. A for-loop in R is different from a for-loop in C. It is similar to foreach loop in Perl. If v is a vector, then for (n in v) first creates the vector v and then always performs length(v) iterations. Before iteration i, n is assigned v[i] even if n is changed in the previous iteration. If you want to control the loop variable during execution, it is possible to use a while loop, where you have full control. While loop may be better also if v has a very large length, since, for example for (n in 1:1000000) creates a vector of length 1000000 in memory. It should also be noted that the for-loop for (n in 1:k) performs 2 iterations, if k is 0, since 1:0 is a vector of length 2. If k may be 0, then it is better to use for (n in seq(length=k)) since seq(length=0) has length 0. Hope this helps. Petr Savicky. ______________________________________________ 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.