lsparseMatrix-classes         package:Matrix         R Documentation

_S_p_a_r_s_e _l_o_g_i_c_a_l _m_a_t_r_i_c_e_s

_D_e_s_c_r_i_p_t_i_o_n:

     The 'lsparseMatrix' class is a virtual class of sparse matrices
     with 'TRUE'/'FALSE' entries.  Only the positions of the elements
     that are 'TRUE' are stored.  These can be stored in the
     ``triplet'' form (classes 'lgTMatrix', 'lsTMatrix', and
     'ltTMatrix' which really contain pairs, not triplets) or in
     compressed column-oriented form (classes 'lgCMatrix', 'lsCMatrix',
     and 'ltCMatrix') or in compressed row-oriented form (classes
     'lgRMatrix', 'lsRMatrix', and 'ltRMatrix').  The second letter in
     the name of these non-virtual classes indicates 'g'eneral,
     's'ymmetric, or 't'riangular.

_O_b_j_e_c_t_s _f_r_o_m _t_h_e _C_l_a_s_s:

     Objects can be created by calls of the form 'new("lgCMatrix",
     ...)' and so on.  More frequently objects are created by coercion
     of a numeric sparse matrix to the logical form for use in the
     symbolic analysis phase of an algorithm involving sparse matrices.
      Such algorithms often involve two phases: a symbolic phase
     wherein the positions of the non-zeros in the result are
     determined and a numeric phase wherein the actual results are
     calculated.  During the symbolic phase only the positions of the
     non-zero elements in any operands are of interest, hence any
     numeric sparse matrices can be treated as logical sparse matrices.

_S_l_o_t_s:


     '_x': Object of class '"logical"', i.e., either 'TRUE', 'NA', or
          'FALSE'.

     '_u_p_l_o': Object of class '"character"'. Must be either "U", for
          upper triangular, and "L", for lower triangular. Present in
          the triangular and symmetric classes but not in the general
          class.

     '_d_i_a_g': Object of class '"character"'. Must be either '"U"', for
          unit triangular (diagonal is all ones), or '"N"' for
          non-unit.  The implicit diagonal elements are not explicitly
          stored when 'diag' is '"U"'.  Present in the triangular
          classes only.

     '_p': Object of class '"integer"' of pointers, one for each column
          (row), to the initial (zero-based) index of elements in the
          column.  Present in compressed column-oriented and compressed
          row-oriented forms only.

     '_i': Object of class '"integer"' of length nnzero (number of
          non-zero elements).  These are the row numbers for each TRUE
          element in the matrix.  All other elements are FALSE. Present
          in triplet and compressed column-oriented forms only.

     '_j': Object of class '"integer"' of length nnzero (number of
          non-zero elements).  These are the column numbers for each
          TRUE element in the matrix.  All other elements are FALSE.
          Present in triplet and compressed column-oriented forms only.

     '_D_i_m': Object of class '"integer"' - the dimensions of the matrix.

_M_e_t_h_o_d_s:


     _c_o_e_r_c_e 'signature(from = "dgCMatrix", to = "lgCMatrix")'

     _t 'signature(x = "lgCMatrix")': returns the transpose of 'x'

_S_e_e _A_l_s_o:

     the class 'dgCMatrix'

_E_x_a_m_p_l_e_s:

     (m <- Matrix(c(0,0,2:0), 3,5, dimnames=list(LETTERS[1:3],NULL)))
     (lm <- (m > 1)) # lgC
     !lm     # no longer sparse
     stopifnot(is(lm,"lsparseMatrix"),
               identical(!lm, m <= 1))

     data(KNex)
     str(mmG.1 <- (KNex $ mm) > 0.1)# "lgC..."
     table(mmG.1@x)# however with many ``non-structural zeros''
     ## from logical to nz_pattern -- okay when there are no NA's :
     nmG.1 <- as(mmG.1, "nMatrix") # <<< has "TRUE" also where mmG.1 had FALSE
     ## from logical to "double"
     dmG.1 <- as(mmG.1, "dMatrix") # has '0' and back:
     lmG.1 <- as(dmG.1, "lMatrix") # has no extra FALSE, i.e. drop0() included
     stopifnot(identical(nmG.1, as((KNex $ mm) != 0,"nMatrix")),
               validObject(lmG.1), all(lmG.1@x),
               # same "logical" but lmG.1 has no 'FALSE' in x slot:
               all(lmG.1 == mmG.1))

     class(xnx <- crossprod(nmG.1))# "nsC.."
     class(xlx <- crossprod(mmG.1))# "dsC.." : numeric
     is0 <- (xlx == 0)
     mean(as.vector(is0))# 99.3% zeros: quite sparse, but
     table(xlx@x == 0)# more than half of the entries are (non-structural!) 0
     stopifnot(isSymmetric(xlx), isSymmetric(xnx),
               ## compare xnx and xlx : have the *same* non-structural 0s :
               sapply(slotNames(xnx),
                      function(n) identical(slot(xnx, n), slot(xlx, n))))

