Matrix package: band matrix
Then? :
xxx <- data.frame(x1 =rnorm(5), offd= c(1:4,0) )
M <-Matrix(0,5,5)
rrr <- dim(M)[1]
for (rr in 1:rrr){ M[rr,rr] <- xxx$x1[rr] }
for (rr in 1:(rrr-1)){ M[rr+1,rr] <- xxx$offd[rr] ; M[rr,rr+1] <- xxx
$offd[rr]}
> M
5 x 5 sparse Matrix of class "dgCMatrix"
[1,] -1.494930 1.0000000 . . .
[2,] 1.000000 -0.6439328 2.000000 . .
[3,] . 2.0000000 1.428798 3.0000000 .
[4,] . . 3.000000 -0.3874097 4.00000000
[5,] . . . 4.0000000 -0.07082702
David Winsemius
On Feb 20, 2009, at 8:49 AM, Thomas Lumley wrote:
On Fri, 20 Feb 2009, David Winsemius wrote:
If you can tolerate the subdiagonal and superdiagonal zero elements being populated, then perhaps this is useful. If there is a subset function as you suggest, then perhaps further reduction would be feasible from this as a starting point. At least it would reduce the size from 10^5 x 10^5 to 10^5 x 3: library(Matrix) xxx <- data.frame(x1 =1:5, y1=c(0,6,0,7,0) ) M= Matrix(0,5,5) M[row(M) == col(M)] <- xxx$x1 M[row(M)-1 == col(M)] <- xxx$y1[1:(length(xxx$y1)-1)] M[row(M) == col(M)-1] <- xxx$y1[1:(length(xxx$y1)-1)]
That provides the right structure, but row(M) and col(M) are dense
matrices with 10^10 elements, so it still uses too much memory.
-thomas
Thomas Lumley Assoc. Professor, Biostatistics
tlumley at u.washington.edu University of Washington, Seattle