Re: [Rd] Matrix*vector: coercing sparse to dense matrix for arithmetic

From: Douglas Bates <>
Date: Wed 29 Nov 2006 - 17:19:52 GMT

On 11/29/06, Tamas K Papp <> wrote:

> I have a sparse Matrix (kronecker product of spline design matrices),
> and I need to multiply each row by a number to get another matrix. If
> the matrix is A and the numbers are stored in a vector k, with plain
> vanilla matrices I would do

> A*k

> But when using the Matrix package (class of A is "dgCMatrix"), I get
> the warning "coercing sparse to dense matrix for arithmetic". The
> error message is perfectly reasonable, I am looking for a way to do it
> right (keeping operations in the realm of sparse matrices). Any help
> would be appreciated.

I would suggest premultiplying by a diagonal matrix. However, when I look at the method dispatch after an example it doesn't appear to be making a good choice. What I think should work well (and Martin or I will make the necessary changes to ensure that it does) is

data(KNex); mm <- KNex$mm
system.time(Diagonal(x = rnorm(nrow(mm))) %*% mm) mailing list Received on Thu Nov 30 18:11:34 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Thu 30 Nov 2006 - 09:30:53 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.