--- title: "Arithmetic" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Arithmetic} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) # Enable densification for vignette examples old_options <- options(dbMatrix.allow_densify = TRUE) ``` ```{r setup} library(dbMatrix) ``` ## dbMatrix arithmetic `dbMatrix` objects support `Arith` and `Ops` operations. We will demonstrate how to perform arithmetic operations on `dbSparseMatrix` objects. **Note:** Some operations with zero values are not yet supported with dbMatrix objects. In addition, certain arithmetic operations between `dbMatrix` objects are also not yet supported. We welcome user feedback and reporting issues on the [Github page ](https://github.com/dbverse-org/dbmatrix-r/). ### Create test data Let's create a simple sparse matrix for demonstration: ```{r} # Create a sparse matrix set.seed(42) dgc <- Matrix::rsparsematrix(100, 50, density = 0.1, rand.x = function(n) rpois(n, 5) + 1) rownames(dgc) <- paste0("gene_", seq_len(100)) colnames(dgc) <- paste0("cell_", seq_len(50)) dplyr::glimpse(dgc) ``` The matrix contains 100 rows (genes) and 50 columns (cells). Like most single-cell RNA-seq data, the matrix is sparse. ### Create a dbMatrix object Let's create a `dbSparseMatrix` object from the above `dgc` object. ```{r} # Note: by default the constructor creates a dbMatrix object in-memory con <- DBI::dbConnect(duckdb::duckdb(), ":memory:") dbsm <- dbMatrix( value = dgc, con = con, name = "test_matrix", class = "dbSparseMatrix", overwrite = TRUE ) # preview the object dbsm ``` ### Scalar Arithmetic `dbMatrix` emulates scalar arithmetic in the `Matrix` package. Note: Addition or subtraction with non-zero addends on a `dbSparseMatrix` results in a `dbDenseMatrix`. ```{r} dbsm + 1 dbsm * 100 ``` ### Matrix Arithmetic `dbMatrix` also supports matrix arithmetic for `dbMatrix` objects that are [conformable](https://en.wikipedia.org/wiki/Conformable_matrix). ```{r} dbsm + dbsm ``` ### Matrix Multiplication #### Hadamard product ```{r} dbsm * dbsm ``` #### Matrix product TODO ### Cleanup ```{r} DBI::dbDisconnect(con, shutdown = TRUE) options(old_options) ``` ### Session Info ```{r} sessionInfo() ```