Rev 4109 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
- Sparse matrix methods can now be based on the CHOLMOD package. Wewill need to migrate from the current code to CHOLMOD-based codeusing #ifdef USE_CHOLMOD. Some of the things to be done- Move documentation from subdirectories of src to inst/doc- Write utilities to create a cholmod_sparse pointer from adgCMatrix or lgCMatrix (or zgCMatrix) object without copying andallocating.- Start adding simple S4 methods ( %*%, +, cbind, t) forCsparseMatrix using CHOLMOD.- check to see if the .onLoad function to require the methods package(in the AllClass.R file) is needed-- no, it is not: "Depends: " in DESCRIPTION suffices.- Should the uplo and diag slots continue to be stored as character?An alternative is to use a factor as in the enum values for thecblas.-- Leave as character but use care in determining the default cases-- E.g. Checks for diag slot should check for 'U' or 'u' vs. anything else- Organization of the source code files - right now they are organizedaccording to class (e.g. dgeMatrix.R, dgeMatrix.h, dgeMatrix.c). Isthere a better way?-- This seems ok.- Fix the calculation of the Dim slot for the crossprod method fordgCMatrix objects (too tired to do that now).-- Done- spelling style: Should "coersion" be "coercion" ?-- Yes. Watch for this.- src/Metis/ : one of the two Makefiles needs fixing, as changingsrc/Metis/*.c does not lead to recompilation.--DB - it seems both Makefiles need fixing. I think I have thesrc/Metis/Makefile fixed but not src/Makefile--DB - now have both working, I believe.- man/Matrix.Rd : has example with dimnames, but we just drop them!MM thinks dimnames should be supported (but then ...)-- added 'Dimnames' slot (2005-02-10)- bCrosstab(): yes, we really do want the diagonal "V:V" crosstabs.-- explained a bit more in man/bCrosstab.Rd- Clean up vestigial functions (pdFactor, pdMatrix, matrix<-) from thenlme package.- create a class of permutation matrices for use in expand. Thecurrent expand method for the LU factorization is not completebecause it does not provide the permutation.- tcrossprod() now works: C code now "exported" via init.c- Fixed: dtpMatrix(... diag = "U") (i.e., unit-diagonal packed triangular)*does* need 'x' entries for the diagonal but these are never looked at.-> changed doc -- Lapack also says they are not referenced but assumed 1.- in lmer.c check all instances of the use of ZtX and XtX and changethem so that having a negative last element of nc means use theresponse only (but look for it in the right place).- Solved:Currently the show() method fail sometime after coercion:e.g. 'sy' show()s wrongly, even though it "str()" fine :(po <- crossprod(Matrix(0:3, 2))) # ok(ge <- as(po, "dgeMatrix")) # ok(sy <- as(po, "dsyMatrix")) # BADstr(sy) # looks fineorexample(expand) # -> ex$L and ex$U look bad, howeveras(ex$L, "dgeMatrix") # `works'{Of course, we don't need a workaround but must understandand solve the problem}- slot "factors" maybe should move up to "Matrix" -- done, 2005-09-28- group generics: "Arith", also "Compare", "Math" etc;see ?Math and the examples in ?SetGeneric- methods for rbind and cbind where they make sense:R 2.2.0 (and newer) provide cbind2() and rbind2() generics and defaultmethods [following John Chambers's proposition], and we have implementedmethods for them.- arithmetic for sparse matrices:done for <sparseMatrix> o <scalar>{more needed: see TODO}- rcond() of a singular dpoMatrix gives a LaPack error instead of just 0:MM <- crossprod(M <- Matrix(c(1:4,9:6), 2,4)) ; rcond(MM)Done(2005-10-03): The error message is more helpful now.- implement diagonal Matrix class "ddiMatrix" etcusing constructor function Diagonal() {and extractor diag()}.Done(2006-01-03)- new("ltTMatrix") now at least prints-- Done by version 0.995-1 ---- Migration of lmer from the mer representation to the mer2representation and the use of the CHOLMOD code for the sparsematrix decomposition. Some of the things that need to be done.- Matrices in the mer2 representation are classed matrices, in themer representation they were unclassed. Any parts inside the Ccode that would access, for example,REAL(GET_SLOT(x, Matrix_RXXSym))need to be modified to accessREAL(GET_SLOT(GET_SLOT(x, Matrix_RXXSym), Matrix_xSym))This is especially important for Omega but I think I have donethose changes already.- The components named *X* in an mer object refers to an augmenteddesign matrix of p+1 columns. In the mer2 object there areseparate slots for rZy and rXy. The scalar y'y is the firstelement of devComp.- Presently nc is of length nf+1 and the last element is n, thenumber of observations. This value should be moved to devComp andnc made of length nf.- The slot L is a list of length 1 that contains an ExternalPointerto a cholmod_factor object. This contains a permutation which ismost easily accessible through cholmod_solve(CHOLMOD_P,...) orcholmod_solve(CHOLMOD_Pt,...). The ZtX, Zty, RZX and rZy slots actuallycontain P%*%RZX and P%*%rZy- "[<-" Methods for dgC* and dgT* the former building on the latterusing j = .Call("Matrix_expand_pointers", x@p, PACKAGE = "Matrix")where needed- Put the matrix 'mm' and the response vector 'y' into 'KNex', a list.Modified all examples and tests that used them and the Comparisons vignette.- rowSums(), colSums(), rowMeans & colMeans() now should work for allsparse and dense matrices, via "dgeMatrix", "dgC*" and "dgT*".- Suitably adjust classes of matrices after subscripting.head(Hilbert(9)) and the equivalent expression Hilbert(9)[1:4,]now work and return "dgeMatrix" (and not ..symmetric..).We try to propagate the class to the subscripted matrixbut, if that fails its test, fall back on a general matrix class. -- for denseThat is, the fallback class for dsyMatrix, etc. is dgeMatrix; thefallback class for dsCMatrix is dgCMatrix, etc.- tril(), triu() now return matrices of *triangular* classes.- Factorizations: LU and solve() for *sparse* Matrices is now done,----------------- using CSparse (and not UMFPACK as originally thought)- M[i,j] <- "sub-Matrix" now works.- "Compare" for dgC & dgT --- to be able to do M[M > 10] etc- new("ltTMatrix", diag = "U", Dim = c(2:2, 2:2)) now works- Diagonal(3) - toeplitz(c(0,1,0)) orDiagonal(4) >= 0 now work- .Call(Csparse_Csparse_crossprod, ...) for crossprod(x,y) {2-args}- When 'x' is a symmetric matrix,a) x[i,i] should return a *symmetric* matrix too (when 'i' has length > 1)b) x[i,i] <- scalar_value should ``keep x symmetric'',i.e. also return symmetricM*- Fully implement "Logic" methods - now (R 2.4.1) that the group is in S4