Brings SummarizedExperiment to the tidyverse!
website: stemangiola.github.io/tidySummarizedExperiment/
Please also have a look at
library(knitr) knitr::opts_chunk$set(warning=FALSE, message=FALSE)
tidySummarizedExperiment provides a bridge between Bioconductor SummarizedExperiment [@morgan2020summarized] and the tidyverse [@wickham2019welcome]. It creates an invisible layer that enables viewing the Bioconductor SummarizedExperiment object as a tidyverse tibble, and provides SummarizedExperiment-compatible dplyr, tidyr, ggplot and plotly functions. This allows users to get the best of both Bioconductor and tidyverse worlds.
SummarizedExperiment-compatible Functions | Description
------------ | -------------
all
| After all tidySummarizedExperiment
is a SummarizedExperiment object, just better
tidyverse Packages | Description
------------ | -------------
dplyr
| Almost all dplyr
APIs like for any tibble
tidyr
| Almost all tidyr
APIs like for any tibble
ggplot2
| ggplot
like for any tibble
plotly
| plot_ly
like for any tibble
Utilities | Description
------------ | -------------
tidy
| Add tidySummarizedExperiment
invisible layer over a SummarizedExperiment object
as_tibble
| Convert cell-wise information to a tbl_df
if (!requireNamespace("BiocManager", quietly=TRUE)) { install.packages("BiocManager") } BiocManager::install("tidySummarizedExperiment")
From Github (development)
devtools::install_github("stemangiola/tidySummarizedExperiment")
Load libraries used in the examples.
library(ggplot2) library(tidySummarizedExperiment)
tidySummarizedExperiment
, the best of both worlds!This is a SummarizedExperiment object but it is evaluated as a tibble. So it is fully compatible both with SummarizedExperiment and tidyverse APIs.
pasilla_tidy <- tidySummarizedExperiment::pasilla %>% tidy()
It looks like a tibble
pasilla_tidy
But it is a SummarizedExperiment object after all
Assays(pasilla_tidy)
We can use tidyverse commands to explore the tidy SummarizedExperiment object.
We can use slice
to choose rows by position, for example to choose the first row.
pasilla_tidy %>% slice(1)
We can use filter
to choose rows by criteria.
pasilla_tidy %>% filter(condition == "untreated")
We can use select
to choose columns.
pasilla_tidy %>% select(sample)
We can use count
to count how many rows we have for each sample.
pasilla_tidy %>% count(sample)
We can use distinct
to see what distinct sample information we have.
pasilla_tidy %>% distinct(sample, condition, type)
We could use rename
to rename a column. For example, to modify the type column name.
pasilla_tidy %>% rename(sequencing=type)
We could use mutate
to create a column. For example, we could create a new type column that contains single
and paired instead of single_end and paired_end.
pasilla_tidy %>% mutate(type=gsub("_end", "", type))
We could use unite
to combine multiple columns into a single column.
pasilla_tidy %>% unite("group", c(condition, type))
We can also combine commands with the tidyverse pipe %>%
.
For example, we could combine group_by
and summarise
to get the total counts for each sample.
pasilla_tidy %>% group_by(sample) %>% summarise(total_counts=sum(counts))
We could combine group_by
, mutate
and filter
to get the transcripts with mean count > 0.
pasilla_tidy %>% group_by(transcript) %>% mutate(mean_count=mean(counts)) %>% filter(mean_count > 0)
my_theme <- list( scale_fill_brewer(palette="Set1"), scale_color_brewer(palette="Set1"), theme_bw() + theme( panel.border=element_blank(), axis.line=element_line(), panel.grid.major=element_line(size=0.2), panel.grid.minor=element_line(size=0.1), text=element_text(size=12), legend.position="bottom", aspect.ratio=1, strip.background=element_blank(), axis.title.x=element_text(margin=margin(t=10, r=10, b=10, l=10)), axis.title.y=element_text(margin=margin(t=10, r=10, b=10, l=10)) ) )
We can treat pasilla_tidy
as a normal tibble for plotting.
Here we plot the distribution of counts per sample.
pasilla_tidy %>% tidySummarizedExperiment::ggplot(aes(counts + 1, group=sample, color=`type`)) + geom_density() + scale_x_log10() + my_theme
sessionInfo()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.