Rev 1401 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
setAs("dgTMatrix", "dgCMatrix",function(from) .Call("dgTMatrix_to_dgCMatrix", from) )setAs("dgTMatrix", "dgeMatrix",function(from) .Call("dgTMatrix_to_dgeMatrix", from) )setAs("dgTMatrix", "matrix",function(from) .Call("dgTMatrix_to_matrix", from) )setAs("dgeMatrix", "dgTMatrix",function(from) as(as(from, "dgCMatrix"), "dgTMatrix"))setMethod("[", signature(x = "dgTMatrix",i = "missing", j = "missing", drop = "ANY"),function (x, i, j, ..., drop) x)setMethod("[", signature(x = "dgTMatrix", i = "numeric", j = "missing",drop = "logical"),function (x, i, j, ..., drop) { ## select rowsstorage.mode(i) <- "integer"xi <- x@i + 1:1 # 1-indexingsel <- xi %in% ind <- c(length(i), ncol(x))x <- new("dgTMatrix", Dim = nd,i = match(xi[sel], i) - 1:1,j = x@j[sel],x = x@x[sel])if (drop && any(nd == 1)) drop(as(x,"matrix")) else x})setMethod("[", signature(x = "dgTMatrix", i = "missing", j = "numeric",drop = "logical"),function (x, i, j, ..., drop) { ## select columnsstorage.mode(j) <- "integer"xj <- x@j + 1:1 # 1-indexingsel <- xj %in% jnd <- c(nrow(x), length(j))x <- new("dgTMatrix", Dim = nd,i = x@i[sel],j = match(xj[sel], j) - 1:1,x = x@x[sel])if (drop && any(nd == 1)) drop(as(x,"matrix")) else x})## How can we get at A[ ij ] where ij is (i,j) 2-column matrix?## and A[ LL ] where LL is a logical *vector*setMethod("[", signature(x = "dgTMatrix", i = "numeric", j = "missing",drop = "missing"),function(x,i,j, ..., drop)callGeneric(x, i=i, drop = TRUE)# or rather 'FALSE' ?)setMethod("[", signature(x = "dgTMatrix", i = "missing", j = "numeric",drop = "missing"),function(x,i,j, ..., drop)callGeneric(x, j=j, drop = TRUE)# or rather 'FALSE' ?)## [.data.frame has : drop = if (missing(i)) TRUE else length(cols) == 1)setMethod("[", signature(x = "dgTMatrix",i = "numeric", j = "numeric", drop = "logical"),function (x, i, j, ..., drop){## (i,j, drop) all specifiedstorage.mode(i) <- "integer"storage.mode(j) <- "integer"xi <- x@i + 1:1xj <- x@j + 1:1sel <- (xi %in% i) & (xj %in% j)nd <- c(length(i), length(j))x <- new("dgTMatrix", Dim = nd,i = match(xi[sel], i) - 1:1,j = match(xj[sel], j) - 1:1,x = x@x[sel])if (drop && any(nd == 1)) drop(as(x,"matrix")) else x})setMethod("[", signature(x = "dgTMatrix",i = "numeric", j = "numeric", drop = "missing"),function(x,i,j, drop) callGeneric(x,i,j,drop= TRUE))setMethod("crossprod", signature(x = "dgTMatrix", y = "missing"),function(x, y = NULL).Call("csc_crossprod", as(x, "dgCMatrix")))setMethod("crossprod", signature(x = "dgTMatrix", y = "matrix"),function(x, y = NULL).Call("csc_matrix_crossprod", as(x, "dgCMatrix"), y))##setMethod("crossprod", signature(x = "dgTMatrix", y = "numeric"),## function(x, y = NULL)## .Call("csc_matrix_crossprod", as(x, "dgCMatrix"), as.matrix(y)))setMethod("tcrossprod", signature(x = "dgTMatrix"),function(x).Call("csc_tcrossprod", as(x, "dgCMatrix")))setMethod("image", "dgTMatrix",function(x,xlim = c(-0.5, matdim[2]-0.5),ylim = c(matdim[1]-0.5, -0.5),sub = sprintf("Dimensions: %d x %d", matdim[1], matdim[2]),xlab = "Column", ylab = "Row",cuts = 20,col.regions = grey(seq(from = 0.7, to = 0, length = 100)),...){matdim <- x@Dimlevelplot(abs(x@x) ~ x@j * x@i,sub = sub,xlab = xlab, ylab = ylab,xlim = xlim, ylim = ylim,col.regions = col.regions,par.settings = list(background = list(col = "transparent")),panel = function(x, y, z, subscripts, at, ..., col.regions){x <- as.numeric(x[subscripts])y <- as.numeric(y[subscripts])numcol <- length(at) - 1numcol.r <- length(col.regions)col.regions <-if (numcol.r <= numcol)rep(col.regions, length = numcol)else col.regions[floor(1+(1:numcol-1)*(numcol.r-1)/(numcol-1))]zcol <- rep(NA, length(z)) #numeric(length(z))for (i in seq(along = col.regions))zcol[!is.na(x) & !is.na(y) & !is.na(z) &z>=at[i] & z<at[i+1]] <- izcol <- as.numeric(zcol[subscripts])if (any(subscripts))grid.rect(x = x, y = y, width = 1, height = 1,default.units = "native",gp = gpar(fill = col.regions[zcol],col = NULL))}, ...)})## Uses the triplet convention of *adding* entries with same (i,j):setMethod("+", signature(e1 = "dgTMatrix", e2 = "dgTMatrix"),function(e1, e2) {if (any(e1@Dim != e2@Dim))stop("Dimensions not compatible for addition")new("dgTMatrix", i = c(e1@i, e2@i), j = c(e1@j, e2@j),x = c(e1@x, e2@x), Dim = e1@Dim)})setMethod("t", signature(x = "dgTMatrix"),function(x)new("dgTMatrix", i = x@j, j = x@i, x = x@x, Dim = rev(x@Dim)))setMethod("isSymmetric", signature(object = "dgTMatrix"),function(object, ...)isTRUE(all.equal(as(object, "dgCMatrix"),as(t(object), "dgCMatrix"))))setAs("dgTMatrix", "dsCMatrix",function(from) {if (!isSymmetric(from))stop("cannot coerce non-symmetric matrix to dsCMatrix class")upper <- from@i <= from@juC <- as(new("dgTMatrix", Dim = from@Dim, i = from@i[upper],j = from@j[upper], x = from@x[upper]), "dgCMatrix")new("dsCMatrix", Dim = uC@Dim, p = uC@p, i = uC@i, x = uC@x, uplo = "U")})setAs("matrix", "dgTMatrix",function(from) {x <- as.double(from)nz <- as.logical(x)new("dgTMatrix", Dim = dim(from),i = as.integer(row(from) - 1)[nz] ,j = as.integer(col(from) - 1)[nz],x = x[nz])})setMethod("kronecker", signature(X = "dgTMatrix", Y = "dgTMatrix"),function (X, Y, FUN = "*", make.dimnames = FALSE, ...){if (FUN != "*") stop("kronecker method must use default 'FUN'")ydim <- Y@Dimxi <- X@ixnnz <- length(xi)yi <- Y@iynnz <- length(yi)new("dgTMatrix", Dim = X@Dim * ydim,i = rep.int(yi, xnnz) + ydim[1] * rep.int(xi, rep.int(ynnz, xnnz)),j = rep.int(Y@j, xnnz) + ydim[2] * rep.int(X@j, rep.int(ynnz, xnnz)),x = as.vector(outer(Y@x, X@x)))}, valueClass = "dgTMatrix")