Construct a CompressedMatrix object from a scalar, vector or matrix.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
makeCompressedMatrix(x, dims, byrow=TRUE) ## S3 method for class 'CompressedMatrix' dim(x) ## S3 method for class 'CompressedMatrix' length(x) ## S3 method for class 'CompressedMatrix' x[i, j, drop=TRUE] ## S3 replacement method for class 'CompressedMatrix' x[i, j] <- value ## S3 method for class 'CompressedMatrix' Ops(e1, e2) ## S3 method for class 'CompressedMatrix' rbind(...) ## S3 method for class 'CompressedMatrix' cbind(...) ## S3 method for class 'CompressedMatrix' as.matrix(x, ...)
an integer vector indicating the matrix dimensions, ignored if
subset indices to apply to
logical, indicating whether or not to drop dimensions when subsetting to a single row/column
an array-like object or vector to be used to replace values in
a CompressedMatrix object
multiple CompressedMatrix objects for
The CompressedMatrix is used throughout edgeR to save space in storing offsets and (to a lesser extent) weights.
This is because, for routine analyses, offsets are the same for all genes so it makes little sense to expand it to the full dimensions of the count matrix.
Most functions will accept a CompressedMatrix as input to
A object of class CompressedMatrix, containing
x and the additional attributes
makeCompressedMatrix function creates a CompressedMatrix object from
The CompressedMatrix class inherits from a matrix and holds two logical scalar attributes
Each attribute specifies whether the values are to be repeated across rows and/or across columns.
This avoids the need to store redundant values in a full-sized matrix of dimensions
dim, as would be done with
To illustrate, consider that rows usually correspond to genes while columns usually correspond to libraries.
If we have a vector of library sizes, this will hold one unique value per library that is the same for all genes.
Thus, we should use
byrow=TRUE, which will construct a CompressedMatrix object storing one row containing this vector.
repeat.col=FALSE, indicating that the row is to be repeated for all genes.
On the other hand, we may have a vector of gene-specific values that is the same for all libraries (e.g., dispersions).
In this case, we should use
byrow=FALSE to construct the CompressedMatrix object.
This will store one column with
repeat.col=TRUE, indicating that the column should be repeated across libraries.
In cases where
x is a scalar,
byrow is ignored and both
repeat.col will be
TRUE by default.
x is a matrix, both attributes will be
x is a CompressedMatrix, it will be returned without modification.
Subsetting of a CompressedMatrix object depends on the values of
If the rows are repeated, any subsetting by row will be effectively ignored, only altering the stored dimensions of
x without changing the values.
Similarly, if the columns are repeated, any subsetting by column will be ignored.
If neither are repeated, subsetting behaves as it would for a normal matrix.
Combining of a CompressedMatrix object will also make use of the repeat structure.
If rows are repeated in all objects to be combined, the output of
cbind will also have repeated rows.
Similarly, if columns are repeated, the output of
rbind will also have repeated columns.
Otherwise, all objects are expanded to their full size prior to combining.
Binary operators work on pairs of CompressedMatrix objects, again preserving the repeat structure whenever possible.
Extracting dimensions uses a second
Dims field in the attributes, bypassing the
dim for a base matrix.
as.matrix on a
CompressedMatrix object will return the ordinary (uncompressed) matrix.
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
# Repeated rows: library.sizes <- runif(4, 1e6, 2e6) lib.mat <- makeCompressedMatrix(library.sizes, c(10, 4), byrow=TRUE) lib.mat lib.mat[,1:2] # subset by column works as expected lib.mat[1:10,] # subset by row has no effect (see Details) as.matrix(lib.mat) # Repeated columns: gene.disp <- runif(10, 0.01, 0.1) disp.mat <- makeCompressedMatrix(gene.disp, c(10, 4), byrow=FALSE) disp.mat disp.mat[,1:2] # subset by column has no effect disp.mat[1:5,] # subset by row works as expected as.matrix(disp.mat) # Scalar: weights <- makeCompressedMatrix(1, c(10, 4)) weights[1:10,] # subsetting has no effect weights[,1:10] as.matrix(weights) # Matrix: offsets <- makeCompressedMatrix(matrix(runif(40), 10, 4)) offsets[1:5,] offsets[,1:2] as.matrix(offsets)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.