On Mon, Mar 19, 2012 at 2:07 PM, David Stevens <david.stev...@usu.edu> wrote: > I'm a bit clumsy about many things in R. Here's my problem. I'm trying to > build a square sparse matrix and populate it without looping (bad practice, > right). I have vectors of matched row/column pairs for which the matrix > entries have common characteristics and am look for a way to fill the > entries. So, if the matrix is A[20 by 20], and I might have rows > > iRows <- c(2,3,4,6,7,8,10,11,12,14,15,16,18,19) > > and columns > > iCols <- c(1,2,3,5,6,7,9,10,11,13,14,15,17,18) > > and you see these are most of the subdiagonal terms in A from rows 2-19. > They are all calculated in a similar way using values from a data frame in > which the terms are generally in iRows and iCols. > > I could loop through each pair and all's well, but my question is whether > there's an R-certified alternative, that will speed things up when the > matrix is much larger (it will be - this is a prototype). > > Any thoughts?
This isn't very elegant, but it's a solution, and probably quite fast on large matrices: n = 20 # matrix dimension # Calculate the indices of the elements when the matrix is turned into a single linear vector indices = (iCols-1) * n + iRows # Fill the vector A.vector = rep(0, n^2); A.vector[indices] = values; # Pick one: Assign the values from the vector to the matrix A[, ] = A.vector # Or re-dimension the vector to a matrix # if copying is to be avoided) dim(A.vector) = c(n,n); A=A.vector; HTH, Peter > > David S > > -- > David K Stevens, P.E., Ph.D., Professor > Civil and Environmental Engineering > Utah Water Research Laboratory > 8200 Old Main Hill > Logan, UT 84322-8200 > 435 797 3229 - voice > 435 797 1363 - fax > david.stev...@usu.edu > > ______________________________________________ > 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. ______________________________________________ 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.