[R] Nested for loops

Daniel Nordlund djnordlund at verizon.net
Tue Jul 14 07:55:21 CEST 2009


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Michael Knudsen
> Sent: Monday, July 13, 2009 10:39 PM
> To: r-help at r-project.org
> Subject: [R] Nested for loops
> 
> Hi,
> 
> I have spent some time locating a quite subtle (at least in my
> opinion) bug in my code. I want two nested for loops traversing the
> above-diagonal part of a square matrix. In pseudo code it would
> something like
> 
> for i = 1 to 10
> {
>    for j = i+1 to 10
>    {
>       // do something
>    }
> }
> 
> However, trying to do the same in R, my first try was
> 
> for (i in 1:10)
> {
>    for (j in (i+1):10)
>    {
>        // do something
>    }
> }
> 
> but there's a problem here. For i=10, the last for loop is over 11:10.
> Usually programming laguages would regard what corresponds to 11:10 as
> empty, but A:B with A bigger than B is in R interpreted as the numbers
> from B to A in reverse order.
> 
> Is there a clever way to make nested loops like the one above in R?
> 

Michael,

If you are tryuly interested in the ABOVE diagonal elements (i.e. not
including diagonal element temselves), the your loop should be

 for (i in 1:9)
 {
    for (j in (i+1):10)
    {
        // do something
    }
 }

And you avoid your current problem.  

Hope this is helpful,

Dan

Daniel Nordlund
Bothell, WA USA




More information about the R-help mailing list