Version: | 2.1.1 |
License: | MIT + file LICENSE |
Title: | Partitioned Symmetric Matrices |
Description: | A matrix-like class to represent a symmetric matrix partitioned into file-backed blocks. |
URL: | https://github.com/QuantGen/symDMatrix |
BugReports: | https://github.com/QuantGen/symDMatrix/issues |
Depends: | R (≥ 3.0.2) |
Imports: | methods, LinkedMatrix (≥ 1.3.0), ff, bit |
Suggests: | BGData, BEDMatrix, tinytest |
NeedsCompilation: | no |
Packaged: | 2020-08-02 12:34:47 UTC; agrueneberg |
Author: | Gustavo de los Campos [aut], Alexander Grueneberg [aut, cre] |
Maintainer: | Alexander Grueneberg <cran@agrueneberg.info> |
Repository: | CRAN |
Date/Publication: | 2020-08-02 13:00:02 UTC |
A Package Providing Symmetric Matrices Partitioned into File-Backed Blocks
Description
A Package Providing Symmetric Matrices Partitioned into File-Backed Blocks.
Example Dataset
The example dataset in the extdata
folder is the G matrix of the
dummy dataset that comes with the BEDMatrix
package. It has been
generated as follows:
library(BGData) X <- BEDMatrix(system.file("extdata", "example.bed", package = "BEDMatrix")) G <- getG_symDMatrix(X, blockSize = 17, folderOut = "inst/extdata")
To load the dataset:
load.symDMatrix(system.file("extdata", "G.RData", package = "symDMatrix"), readonly = TRUE)
To demonstrate the as.symDMatrix
method for character vectors,
RData
files for each block have been generated:
for (i in 1:nBlocks(G)) { for (j in i:nBlocks(G)) { block <- G[[i]][[j]] save(block, file = paste0("inst/extdata/data_", i, "_", j, ".RData")) } }
See Also
symDMatrix-class
for the symDMatrix
class.
BEDMatrix-package
for more information on the
BEDMatrix
package.
Coerce an Object to a symDMatrix Object
Description
Coerce an object to a symDMatrix
object.
Usage
as.symDMatrix(x, ...)
Arguments
x |
A numeric matrix. |
... |
Additional arguments. |
Value
A symDMatrix
object.
See Also
as.symDMatrix.matrix
to coerce a matrix or
as.symDMatrix.character
to coerce a vector of path names to a
symDMatrix
object.
Coerce a Character Vector to a symDMatrix Object
Description
This function creates a symDMatrix
object from a character vector of
path names to RData
files, each containing exactly one
ff_matrix
object that is used as a block, and is useful for
distributed computing where each block is processed on a different node.
Usage
## S3 method for class 'character'
as.symDMatrix(x, ...)
Arguments
x |
A character vector with path names to |
... |
Additional arguments (currently unused). |
Details
The RData
files must be ordered by block: G11, G12, G13, ...,
G1q, G22, G23, ..., G2q, ..., Gqq
. The matrix-like objects are
initialized similarly to load.symDMatrix
.
Value
A symDMatrix
object.
See Also
list.files
to create a character vector of file paths
that match a certain pattern.
Coerce a Matrix to a symDMatrix Object
Description
This function creates a symDMatrix
from a numeric matrix that is
assumed to be symmetric.
Usage
## S3 method for class 'matrix'
as.symDMatrix(x, blockSize = 5000L, vmode = "double",
folderOut = randomString(), ...)
Arguments
x |
A symmetric numeric matrix. |
blockSize |
The number of rows and columns of each block. If |
vmode |
The vmode used to store the data in the |
folderOut |
A name for a folder where to store the data of the resulting
|
... |
Additional arguments (currently unused). |
Details
The input matrix is broken into blocks and each block is stored as an
ff_matrix
object. In addition, a metadata object called
symDMatrix.RData
is created to allow for easy reloading of the
symDMatrix
object.
Value
A symDMatrix
object.
See Also
load.symDMatrix
to reload the symDMatrix
object.
Return the Block Structure of a symDMatrix Object
Description
This function returns the block structure of a symDMatrix
object and
can be useful when implementing custom indexing techniques.
Usage
blockIndex(x)
Arguments
x |
A |
Value
A matrix with three columns: the block number, the start index and the end index.
Return the Block Size of a symDMatrix Object
Description
This function returns the block size of a symDMatrix
object.
Usage
blockSize(x, last = FALSE)
Arguments
x |
A |
last |
A boolean indicating whether to return the block size of the last
( |
Details
The last block of a column/row may be smaller than the other blocks. Its
size can be retrieved by setting last
to TRUE
.
Value
The block size of a symDMatrix
object.
Examples
# Load example symDMatrix (G)
load.symDMatrix(system.file("extdata", "G.RData", package = "symDMatrix"), readonly = TRUE)
# Get the block size
blockSize(G)
# Get the block size of the trailing blocks
blockSize(G, last = TRUE)
Load symDMatrix Objects from .RData Files
Description
This function is similar to load
, but it also initializes the
ff_matrix
blocks in the symDMatrix
object.
Usage
load.symDMatrix(file, readonly = FALSE, envir = parent.frame())
Arguments
file |
The name of an .RData file to be loaded. |
readonly |
Set to TRUE to forbid writing to existing files. |
envir |
The environment where to load the data. |
Return the Number of Column/Row Blocks of a symDMatrix Object
Description
This function returns the number of row blocks the original matrix has been partitioned into.
Usage
nBlocks(x)
Arguments
x |
A |
Value
The number of column/row blocks of a symDMatrix
object.
Examples
# Load example symDMatrix (G)
load.symDMatrix(system.file("extdata", "G.RData", package = "symDMatrix"), readonly = TRUE)
# Get the number of row blocks the original matrix was partitioned into
nBlocks(G)
Create a New symDMatrix Instance
Description
This function constructs a new symDMatrix
object.
Usage
symDMatrix(...)
Arguments
... |
|
Details
Several structural checks are performed on the passed blocks: there must be
at least one block, the blocks must be of type ColumnLinkedMatrix
,
and the number of blocks must be consistent across the
ColumnLinkedMatrix
objects. Each block must inherit from
ff_matrix
and have the same number of rows or columns as blocks in
the same row or column, respectively. Non-final blocks have to be square,
unless if there is only a single block, in which case that block also has
to be square.
Value
A symDMatrix
object.
See Also
as.symDMatrix
to create a symDMatrix
object from other
objects.
Examples
# Generate a symmetric matrix
X <- cov(matrix(data = rnorm(25), nrow = 5, ncol = 5))
# Break this matrix into blocks X11, X12, X22
# X21 can be stored as a virtual transpose of X12
X11 <- ff::as.ff(X[1:3, 1:3])
X12 <- ff::as.ff(X[1:3, 4:5])
X22 <- ff::as.ff(X[4:5, 4:5])
X21 <- ff::vt(X12)
# Create a symDMatrix from blocks
S <- symDMatrix(
LinkedMatrix::ColumnLinkedMatrix(X11, X12),
LinkedMatrix::ColumnLinkedMatrix(X21, X22)
)
nBlocks(S)
blockSize(S)
blockSize(S, last = TRUE)
A Matrix-Like Class to Represent a Symmetric Matrix Partitioned into File-Backed Blocks
Description
A symDMatrix
is a symmetric matrix partitioned into file-backed
blocks. This approach allows for very large symmetric matrices, commonly
found for example when computing genetic relationship matrices on large
cohorts. A symDMatrix
object behaves similarly to a regular
matrix
by implementing key methods such as [
, dim
, and
dimnames
.
Details
The symDMatrix
class is a RowLinkedMatrix
that nests multiple
ColumnLinkedMatrix
objects containing blocks of type
ff_matrix
. Because the matrix is symmetric, only the diagonal and
upper-triangular blocks need to be stored, but for more efficient queries,
the lower-triangular blocks are virtual transposes of their diagonal
counterparts.
See Also
symDMatrix
to create a symDMatrix
object from scratch,
or preferably, as.symDMatrix
to create a symDMatrix
object from other objects.
Examples
# Get the path to the example symmetric matrix
path <- system.file("extdata", "G.RData", package = "symDMatrix")
# Load the example symDMatrix object (G)
load.symDMatrix(path, readonly = TRUE)
# Get the dimensions
dim(G)
# Get the row names
rownames(G)
# Get the column names
colnames(G)
# Extract the diagonal
diag(G)
# Extract rows and columns
G[1, ]
G[1:3, ]
G["per0_per0", ]
G[c("per0_per0", "per1_per1", "per2_per2"), ]