
In answer to the query about iterating over 1 <= i < j <= n 
several people suggested

   for(i in 1:(n-1))
      for(j in (i+1):n))
         ...

This also has the efficiency advantage that the last iteration of i 
is never attempted.  The index arithmetic, albeit minimal, is still 
a bit hard on the mind but its a pretty good practical solution in 
most cases. 

Unfortunately, it fails for n=1.  This may not be so terrible in 
most cases of interest.  However, handling boundary cases correctly 
is a hallmark of good programming so I think we need to keep looking.

Here is another solution I came up with:

   for( i in seq(n) )
      for( j in seq(n)[-seq(i)] )
         ...

however, it too is a kludge in my mind.  An improvement to the 
seq() built into R is what is really required.   Many people are 
used to this in C, awk and perl:

   for( i=1; i<=n; i++ )
      for( j=i+1; j<=n; j++ )

as well as similar constructs in other languages.  The principle 
of least surprise suggests that the R analogue should work 
correctly too.

Its pretty easy to write your own seq but the use of this function is
widespread in R and having it broken in this way just 
encourages kludges, mind numbing workarounds or bad code failing 
to handle boundary conditions.

Creating a new builtin (e.g. seq0), adding an argument to seq 
(e.g. nullOK) or changing seq's behaviour on boundary conditions are three possible solutions.


_____________________________________________________________

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

