Hi R-Help!

I am trying to find a nicer way of extracting all the "complete" diagonals
of a matrix.  I am working with very large matrices that have many more rows
than columns.  I want to be able to extract each of the diagonals that are
as long as the number of columns in the matrix.  I have written a rather
ugly function that presently does the job.  It illustrates what I am trying
to do, but I feel like there must be a cleaner (and faster) way.  Does
anybody have any ideas?  Here is what I've done so far:

diagonals <- function(mat){
output <- matrix(0,(dim(mat)[1]-dim(mat)[2]+1),NCOL(mat))
for(i in 1:NROW(output)){
   G <- c()
   for(j in 1:NCOL(mat)){
      G  <-  c(G,mat[(i+j-1),j])
      }
   output[i,]  <-  G
  }
 return(output)
}

example <- rbind(rep(1,3),rep(2,3),rep(3,3),rep(4,3),rep(5,3))

example
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4
[5,]    5    5    5

 diagonals(example)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    4
[3,]    3    4    5

Many thanks,
Peter

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to