1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#### Logical Symmetric Sparse Matrices in Compressed column-oriented format
### contains = "nsparseMatrix"
setAs("nsCMatrix", "matrix",
function(from) as(as(from, "ngCMatrix"), "matrix"))
setAs("nsCMatrix", "ngCMatrix",
function(from) .Call(Csparse_symmetric_to_general, from))
## Specific conversions, should they be necessary. Better to convert as
## as(x, "TsparseMatrix") or as(x, "denseMatrix")
setAs("nsCMatrix", "nsTMatrix",
function(from) .Call(Csparse_to_Tsparse, from, FALSE))
setAs("nsCMatrix", "dsCMatrix",
function(from) new("dsCMatrix", i = from@i, p = from@p,
x = rep(1, length(from@i)), uplo = from@uplo,
Dim = from@Dim, Dimnames = from@Dimnames))
setAs("nsCMatrix", "dgTMatrix",
function(from) as(as(x, "dsCMatrix"), "dgTMatrix"))
## have rather tril() and triu() methods than
## setAs("nsCMatrix", "ntCMatrix", ....)
setMethod("tril", "nsCMatrix",
function(x, k = 0, ...) {
if(x@uplo == "L" && k == 0)
## same internal structure (speedup potential !?)
new("ntCMatrix", uplo = x@uplo, i = x@i, p = x@p,
Dim = x@Dim, Dimnames = x@Dimnames)
else tril(as(x, "ngCMatrix"), k = k, ...)
})
setMethod("triu", "nsCMatrix",
function(x, k = 0, ...) {
if(x@uplo == "U" && k == 0)
## same internal structure (speedup potential !?)
new("ntCMatrix", uplo = x@uplo, i = x@i, p = x@p,
Dim = x@Dim, Dimnames = x@Dimnames)
else triu(as(x, "ngCMatrix"), k = k, ...)
})
## FIXME: generalize to "nsparseMatrix" or (class union) "symmetric sparse"
setMethod("image", "nsCMatrix",
function(x, ...) {
x <- as(as(x, "dsCMatrix"), "dgTMatrix")
callGeneric()
})
setMethod("chol", signature(x = "nsCMatrix", pivot = "missing"),
function(x, pivot, ...) chol(x, pivot = FALSE))
## .Call(nsCMatrix_chol, x, FALSE))
setMethod("chol", signature(x = "nsCMatrix", pivot = "logical"),
function(x, pivot, ...) stop("temporarily disabled"))## FIXME
## .Call(nsCMatrix_chol, x, pivot))
## Use more general method from CsparseMatrix class
## setMethod("t", signature(x = "nsCMatrix"),
## function(x)
## .Call(nsCMatrix_trans, x),
## valueClass = "nsCMatrix")
|