[R] Filling matrices

Peter Langfelder peter.langfelder at gmail.com
Mon Mar 19 22:16:11 CET 2012


On Mon, Mar 19, 2012 at 2:07 PM, David Stevens <david.stevens at 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.stevens at usu.edu
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list