Thanks for the suggestion, Martin!

I looked at both Matrix::band and Matrix::bandSparse. Maybe I misunderstand the help pages and the examples, but from what I can see neither of them provides the functionality I was looking for.

For the getter version of the function I was looking for, I can't use Matrix::band (by extracting the non-zero elements) because this would require the assumption that the specified band is entirely non-zero, e.g.:

band3 <- function(x,n){
  x <- Matrix::band(x,n,n)
  x[x!=0] ## works for a dense matrix, but not if band n has zeroes
}

As for the setter version of the function I was looking for, it should set the values of a specified band in an existing matrix to be the vector of values provided. As far as I understand, Matrix::bandSparse constructs a matrix rather than modifying the values of an existing matrix.

The functions included in my last post filled this gap. If Matrix::band and Matrix::bandSparse can set/get bands in this way, I would like to see how this can be done. If not, then perhaps they could be extended to achieve this functionality.


On 2011-08-26 14:08, Martin Maechler wrote:
Jeremy David Silver<j...@dmu.dk>
     on Fri, 26 Aug 2011 13:23:43 +0200 writes:
     >  Dear R developers, I was looking for a function analogous
     >  to base::diag() for getting and setting bands of a
     >  matrix. The closest I could find was Matrix::band(), but
     >  this was not exactly what I wanted for two
     >  reasons. Firstly, Matrix::band() returns a matrix rather
     >  than just the specified band.  Secondly, Matrix::band()
     >  cannot be used for setting the values for a matrix band.

Yes, but did you not look at  help(band)
or not look carefully enough ?

--->

   See Also:

        ‘bandSparse’ for the _construction_ of a banded sparse matrix
        directly from its non-zero diagonals.



     >  Setting or getting a matrix band could be of interest for
     >  sufficiently many users that you might consider including
     >  it in base R.  Alternatively, something like this could be
     >  included in the Matrix package.

well, see above and let us know if you see anything lacking in
bandSparse().
Till now we haven't got much feedback about it, and there may
well be room for improvement.

Martin Maechler, ETH Zurich  and co- maintainer("Matrix")


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to