knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
A matrixset
is a container of matrices (both matrix
and types from Matrix
package), each having the same number of rows and columns and the same dimnames.
Moreover, each dimname must uniquely identify elements.
While there is minimal support for NULL
dimnames (and that is bound to
change at some point in the future), it is strongly recommended to
provide meaningful dimnames. One of the main reason for this is that
annotation is impossible with NULL
dimnames.
In addition, as alluded above, a matrixset
can store independent row
and column annotations. This meta information is stored, and available,
in the form of data frames - one for row information and one for column.
The annotation names are referred to as traits.
This latter feature makes matrixset
especially attractive even if it
stores only a single matrix, because several methods have been
developped to manipulate matrixset
s, accounting for annotations.
Many problems that matrixset
can tackle could be solved via a data.frame
and
more specifically using the tidyverse
suite.
Three reasons for which you may want to use a matrixset
instead are:
data.frame
needed to store the same information as a
matrixset
can be significantly biggerMatrix
.
This is one of very few ways (maybe even the only way) to annotate special
matrices.
In addition, dealing with special matrices make the object size argument even
more striking when comparing to the data frame strategy.The easiest way to install matrixset
is from CRAN:
install.packages("matrixset")
Or you can install the development version of matrixset from GitHub with:
# install.packages("devtools") devtools::install_github("pascalcroteau/matrixset")
In addition to store multiple matrices that share the same attributes, a
matrixset
object's strength is it's annotation feature. You create an object
from existing matrices and annotation data.frame
.
library(MASS) library(tidyverse) animals <- as.matrix(Animals) head(animals) animal_info <- MASS::Animals %>% rownames_to_column("Animal") %>% mutate(is_extinct = case_when(Animal %in% c("Dipliodocus", "Triceratops", "Brachiosaurus") ~ TRUE, TRUE ~ FALSE), class = case_when(Animal %in% c("Mountain beaver", "Guinea pig", "Golden hamster", "Mouse", "Rabbit", "Rat") ~ "Rodent", Animal %in% c("Potar monkey", "Gorilla", "Human", "Rhesus monkey", "Chimpanzee") ~ "Primate", Animal %in% c("Cow", "Goat", "Giraffe", "Sheep") ~ "Ruminant", Animal %in% c("Asian elephant", "African elephant") ~ "Elephantidae", Animal %in% c("Grey wolf") ~ "Canine", Animal %in% c("Cat", "Jaguar") ~ "Feline", Animal %in% c("Donkey", "Horse") ~ "Equidae", Animal == "Pig" ~ "Sus", Animal == "Mole" ~ "Talpidae", Animal == "Kangaroo" ~ "Macropodidae", TRUE ~ "Dinosaurs")) %>% select(-body, -brain) animal_info
You can create the object and then do some operations.
library(matrixset) animals_ms <- matrixset(msr = animals, row_info = animal_info, row_key = "Animal") animals_ms %>% apply_row_dfl(rg = ~ range(.i), qt = ~ quantile(.i, probs = c(.25, .75))) animals_ms %>% row_group_by(class) %>% apply_column_dfl(avr = mean)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.