Construct a sparse model or “design” matrix,
form a formula and data frame (sparse.model.matrix
) or a single
factor (fac2sparse
).
The fac2[Ss]parse()
functions are utilities, also used
internally in the principal user level function
sparse.model.matrix()
.
sparse.model.matrix(object, data = environment(object),
contrasts.arg = NULL, xlev = NULL, transpose = FALSE,
drop.unused.levels = FALSE, row.names = TRUE,
verbose = FALSE, …)fac2sparse(from, to = c("d", "i", "l", "n", "z"),
drop.unused.levels = TRUE, giveCsparse = TRUE)
fac2Sparse(from, to = c("d", "i", "l", "n", "z"),
drop.unused.levels = TRUE, giveCsparse = TRUE,
factorPatt12, contrasts.arg = NULL)
an object of an appropriate class. For the default method, a model formula or terms object.
a data frame created with model.frame
. If
another sort of object, model.frame
is called first.
sparse.model.matrix()
:A list, whose entries are
contrasts suitable for input to the contrasts
replacement function and whose names are the names of columns
of data
containing factor
s.
fac2Sparse()
:character string or NULL
or
(coercable to) "'>sparseMatrix"
, specifying the
contrasts to be applied to the factor levels.
to be used as argument of model.frame
if
data
has no "terms"
attribute.
logical indicating if the transpose should be
returned; if the transposed is used anyway, setting transpose = TRUE
is more efficient.
should factors have unused levels dropped?
The default for sparse.model.matrix
has been changed to
FALSE
, 2010-07, for compatibility with R's standard (dense)
model.matrix()
.
logical indicating if row names should be used.
logical or integer indicating if (and how much) progress output should be printed.
further arguments passed to or from other methods.
(for fac2sparse()
:) a factor
.
a character indicating the “kind” of sparse matrix to
be returned. The default, "d"
is for double
.
logical vector, say fp
, of length two;
when fp[1]
is true, return “contrasted” t(X)
;
when fp[2]
is true, the original (“dummy”)
t(X)
, i.e, the result of fac2sparse()
.
a sparse matrix, extending '>CsparseMatrix
(for
fac2sparse()
if giveCsparse
is true as per default; a
'>TsparseMatrix
, otherwise).
For fac2Sparse()
, a list
of length two, both
components with the corresponding transposed model matrix, where the
corresponding factorPatt12
is true.
Note that model.Matrix(*, sparse=TRUE)
from package MatrixModels may be often be preferable to
sparse.model.matrix()
nowadays, as model.Matrix()
returns modelMatrix
objects with additional slots assign
and contrasts
which
relate back to the variables used.
fac2sparse()
, the basic workhorse of
sparse.model.matrix()
, returns the transpose
(t
) of the model matrix.
model.matrix
in standard R's package stats.
model.Matrix
which calls
sparse.model.matrix
or model.matrix
depending on its
sparse
argument may be preferred to sparse.model.matrix
.
as(f, "sparseMatrix")
(see coerce(from = "factor", ..)
in the class doc '>sparseMatrix) produces the
transposed sparse model matrix for a single factor f
(and no contrasts).
# NOT RUN {
dd <- data.frame(a = gl(3,4), b = gl(4,1,12))# balanced 2-way
options("contrasts") # the default: "contr.treatment"
sparse.model.matrix(~ a + b, dd)
sparse.model.matrix(~ -1+ a + b, dd)# no intercept --> even sparser
sparse.model.matrix(~ a + b, dd, contrasts = list(a="contr.sum"))
sparse.model.matrix(~ a + b, dd, contrasts = list(b="contr.SAS"))
## Sparse method is equivalent to the traditional one :
stopifnot(all(sparse.model.matrix(~ a + b, dd) ==
Matrix(model.matrix(~ a + b, dd), sparse=TRUE)),
all(sparse.model.matrix(~ 0+ a + b, dd) ==
Matrix(model.matrix(~ 0+ a + b, dd), sparse=TRUE)))
# }
# NOT RUN {
<!-- %% many more and tougher examples ---> ../tests/spModel.matrix.R -->
# }
# NOT RUN {
(ff <- gl(3,4,, c("X","Y", "Z")))
fac2sparse(ff) # 3 x 12 sparse Matrix of class "dgCMatrix"
##
## X 1 1 1 1 . . . . . . . .
## Y . . . . 1 1 1 1 . . . .
## Z . . . . . . . . 1 1 1 1
## can also be computed via sparse.model.matrix():
f30 <- gl(3,0 )
f12 <- gl(3,0, 12)
stopifnot(
all.equal(t( fac2sparse(ff) ),
sparse.model.matrix(~ 0+ff),
tolerance = 0, check.attributes=FALSE),
is(M <- fac2sparse(f30, drop= TRUE),"CsparseMatrix"), dim(M) == c(0, 0),
is(M <- fac2sparse(f30, drop=FALSE),"CsparseMatrix"), dim(M) == c(3, 0),
is(M <- fac2sparse(f12, drop= TRUE),"CsparseMatrix"), dim(M) == c(0,12),
is(M <- fac2sparse(f12, drop=FALSE),"CsparseMatrix"), dim(M) == c(3,12)
)
# }
Run the code above in your browser using DataLab