Rev 3502 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
### Coercion and Methods for Triangular Triplet Matricesgt2tT <- function(x, uplo, diag) {## coerce *gTMatrix to *tTMatrix {general -> triangular}i <- x@ij <- x@jsel <-if(uplo == "U") {if(diag == "U") i < j else i <= j} else {if(diag == "U") i > j else i >= j}i <- i[sel]j <- j[sel]if(is(x, "lMatrix"))new("ltTMatrix", i = i, j = j, uplo = uplo, diag = diag,Dim = x@Dim, Dimnames = x@Dimnames) # no 'x' slotelsenew(paste(substr(class(x), 1,1), # "d", "l", "i" or "z""tTMatrix", sep=''),i = i, j = j, uplo = uplo, diag = diag,x = x@x[sel], Dim = x@Dim, Dimnames = x@Dimnames)}## Use general method for TsparseMatrix instead## setAs("dtTMatrix", "dtCMatrix",## function(from) {## gC <- .Call(dtTMatrix_as_dgCMatrix, from)## new("dtCMatrix", Dim = gC@Dim, Dimnames = gC@Dimnames, p = gC@p,## i = gC@i, x = gC@x, uplo = from@uplo, diag = from@diag)## })setAs("dtTMatrix", "dgTMatrix",function(from) {d <- from@Dimif(uDiag <- from@diag == "U") # unit diagonal, need to add '1'suDiag <- (n <- d[1]) > 0new("dgTMatrix", Dim = d, Dimnames = from@Dimnames,i = c(from@i, if(uDiag) 0:(n-1)),j = c(from@j, if(uDiag) 0:(n-1)),x = c(from@x, if(uDiag) rep.int(1,n)))})setAs("dtTMatrix", "ltTMatrix",function(from) new("ltTMatrix", i = from@i, j = from@j,uplo = from@uplo, diag = from@diag,Dim = from@Dim, Dimnames = from@Dimnames))## Conversion to dense storage is first to a dtrMatrixsetAs("dtTMatrix", "dtrMatrix",function(from) .Call(dtTMatrix_as_dtrMatrix, from))setAs("dtTMatrix", "matrix",function(from) as(as(from, "dtrMatrix"), "matrix"))setAs("dtTMatrix", "dgeMatrix",function(from) as(as(from, "dtrMatrix"), "dgeMatrix"))setAs("matrix", "dtTMatrix",function(from) as(as(from, "dtpMatrix"), "dtTMatrix"))setMethod("t", signature(x = "dtTMatrix"),function(x)new("dtTMatrix", Dim = rev(x@Dim), diag = x@diag,i = x@j, j = x@i, x = x@x,uplo = if (x@uplo == "U") "L" else "U"),valueClass = "dtTMatrix")