On Wed, 23 Aug 2006, Thomas Lumley wrote: > On Wed, 23 Aug 2006, Dominick Samperi wrote: > > > In for loops of the form: > > for(m in seq(beg,end)) > > ... > > > > when beg > end, the default behavior is > > to decrement, and the action described > > by ... is executed at least once. > > > > On the other hand, if you view this > > construction as a translation of the C code: > > for(m = beg; m < end; m++) > > ...
Your R translates more closely to if(beg <= end) for(m = beg; m <= end; m++) {} else for(m = beg; m >= end; m--) {} which is quite a lot different (and the <= vs < mistake seems to explain why you think it should not be executed at least once). > > then the semantics of C/C++ is not > > respected, or to put it another way, your translation was unfaithful to the original and for(m in beg + seq(length=max(0,end-beg)) ) is a better translation. > > because the code in ... is > > not executed when beg > end in > > the case of C/C++. > > There is another important way in which the C loop is different > from the R loop. If you modify m or end inside the loop the number of > iterations of the C loop changes but the number of iterations of the R > loop doesn't. R's for() loop just isn't the same as C's. I was told only yesterday that one should try to think in the (human) language you are going to be writing in. That I have never needed to write such constructs in years of S/R programming suggests to me that thinking R changes one's perspective over thinking C (or Fortran or ...). -- Brian D. Ripley, [EMAIL PROTECTED] Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel