Avoiding for-loops
On Thursday 25 November 2004 11:15, John wrote:
Hello R-users, I have a symmetric matrix of numerical values and I want to obtain those values in the upper or lower triangle of the matrix in a vector. I tried to do the job by using two for-loops but it doens't seem to be a clever way, and I'd like to know a more efficient code for a large matrix of thousands of rows and columns. Below is my code for your reference.
Try mtx[lower.tri(mtx)] which should give you the same order as your code (untested). HTH, Deepayan
Thanks a lot. John #################### # mtx.sym is a symmetric matrix
my.ftn <- function(size_mtx, mtx) {
+ my.vector <- c()
+ for ( i in 1:size_mtx ) {
+ cat(".")
+ for ( j in 1:size_mtx ) {
+ if ( upper.tri(mtx)[i,j] ) {
+ my.vector <- c(my.vector, mtx[i,j])
+ }}}
+ cat("\n")
+ }
# if I have a matrix, mtx.sym, of 100x100
my.ftn(100, mtx.sym)