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.