[R] Vectorizing a "for" loop

Daniel Gerlanc dgerlanc at gmail.com
Thu Aug 3 16:10:46 CEST 2006


Hello all,

Consider the following problem:

There are two vectors:

rows <- c(1, 2, 3, 4, 5)
columns <- c(10, 11, 12, 13, 14)

I want to create a matrix with dimensions length(rows) x length(columns):

res <- matrix(nrow = length(rows), ncol = length(columns))

If "i" and "j" are the row and column indexes respectively, the values
of the cells are abs(rows[i] - columns[j]).  The resultant matrix
follows:

     [,1] [,2] [,3] [,4] [,5]
[1,]    9   10   11   12   13
[2,]    8    9    10   11   12
[3,]    7    8      9   10   11
[4,]    6    7      8     9   10
[5,]    5    6      7     8    9

This matrix may be generated by using a simple "for" loop:

for(i in 1:length(rows)){
  for(j in 1:length(columns)){
    res[i,j] <- abs(rows[i] - columns[j])
  }
}

Is there a quicker, vector-based approach for doing this or a function
included in the recommended packages that does this?

Thanks!

-- Dan Gerlanc
Williams College



More information about the R-help mailing list