--- title: "Overview" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Overview} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r setup} library(dbMatrix) ``` ## dbMatrix `dbMatrix` is a core package in the [`dbverse`](https://dbverse-org.github.io/dbverse/) library that inherits from the `dbData` base class and consists of two subclasses, `dbSparseMatrix` and `dbDenseMatrix`. `dbMatrix` objects emulate in-memory dense and sparse matrices in an embedded database powered by DuckDB. ## Minimal example ```{r} con <- DBI::dbConnect(duckdb::duckdb(), ":memory:") mat <- matrix(1:9, nrow = 3, ncol = 3) dbmat <- dbMatrix( value = mat, con = con, name = "overview_matrix", class = "dbDenseMatrix", overwrite = TRUE ) dbmat DBI::dbDisconnect(con, shutdown = TRUE) ``` ## dbSparseMatrix ![](../man/figures/dbMatrix-overview.png) Sparse matrices are represented as triplet vectors with `i`, `j`, and `x` numerical vectors. `i` and `j` refer to the row and column indices, respectively, with specific `x` values or counts. Note: The `i` and `j` vectors are one-based following conventions from the `Matrix` R package and the `TSparseMatrix` class. The `dbSparseMatrix` class stores the triplet vector representation with its associated dimension names and dimensions if available. If none are provided, they are automatically generated as factors (enums) with `row#` or `col#` labels for rownames and colnames, respectively. The `dbSparseMatrix` class does not contain zeros in the triplet vector representation. Zero values are inferred based on the provided dimensions. Support for compressed sparse column matrices of the `dgCMatrix` class from the `Matrix` R package is currently implemented. For more information about sparse matrices, see [the wiki article here ](https://en.wikipedia.org/wiki/Sparse_matrix). ## dbDenseMatrix We use the same approach as `dbSparseMatrix` to represent a dense matrix as a triplet `i`, `j`, and `x` vector. The only difference is that the `dbDenseMatrix` class consists of all values in the matrix, including zeros.