Compiled date: 2025-03-06

Last edited: 2020-04-20

License: MIT + file LICENSE

1 Introduction

iSEE is a Bioconductor package that provides an interactive Shiny-based graphical user interface for exploring data stored in SummarizedExperiment objects (Rue-Albrecht et al. 2018). Instructions to install the package are available here. Once installed, the package can be loaded and attached to your current workspace as follows:

library(iSEE)

If you have a SummarizedExperiment object1 Or an instance of a subclass, like a SingleCellExperiment object. named se, you can launch an iSEE app by running:

iSEE(se)

In this vignette, we demonstrate this process using the allen single-cell RNA-seq data set from the scRNAseq package. However, if you want to start playing with the app immediately, you can simply run:

example(iSEE, ask=FALSE)

2 Setting up the data

The allen data set contains expression values for 379 cells from the mouse visual cortex (Tasic et al. 2016), and can be loaded directly by calling ReprocessedAllenData() and specifying the value for the assays parameter. To begin with, we assign the output of this call to an sce object and inspect it.

library(scRNAseq)
sce <- ReprocessedAllenData(assays = "tophat_counts")   # specifying the assays to speed up the example
sce
#> class: SingleCellExperiment 
#> dim: 20816 379 
#> metadata(2): SuppInfo which_qc
#> assays(1): tophat_counts
#> rownames(20816): 0610007P14Rik 0610009B22Rik ... Zzef1 Zzz3
#> rowData names(0):
#> colnames(379): SRR2140028 SRR2140022 ... SRR2139341 SRR2139336
#> colData names(22): NREADS NALIGNED ... Animal.ID passes_qc_checks_s
#> reducedDimNames(0):
#> mainExpName: endogenous
#> altExpNames(1): ERCC

As provided, the sce object contains raw data and a number of quality control and experimental cell annotations, all available in colData(sce).

colnames(colData(sce))
#>  [1] "NREADS"                       "NALIGNED"                    
#>  [3] "RALIGN"                       "TOTAL_DUP"                   
#>  [5] "PRIMER"                       "PCT_RIBOSOMAL_BASES"         
#>  [7] "PCT_CODING_BASES"             "PCT_UTR_BASES"               
#>  [9] "PCT_INTRONIC_BASES"           "PCT_INTERGENIC_BASES"        
#> [11] "PCT_MRNA_BASES"               "MEDIAN_CV_COVERAGE"          
#> [13] "MEDIAN_5PRIME_BIAS"           "MEDIAN_3PRIME_BIAS"          
#> [15] "MEDIAN_5PRIME_TO_3PRIME_BIAS" "driver_1_s"                  
#> [17] "dissection_s"                 "Core.Type"                   
#> [19] "Primary.Type"                 "Secondary.Type"              
#> [21] "Animal.ID"                    "passes_qc_checks_s"

Then, we normalize the expression values with scater.

library(scater)
sce <- logNormCounts(sce, exprs_values="tophat_counts")

Next, we apply PCA and t-SNE to generate two low-dimensional representations of the cells. The dimensionality reduction results are stored in reducedDim(sce).

set.seed(1000)
sce <- runPCA(sce)
sce <- runTSNE(sce)
reducedDimNames(sce)
#> [1] "PCA"  "TSNE"

At this point, the sce object does not contain any annotations for the rows (i.e., features) in the data set. Thus, to prepare a fully-featured example application, we also add some gene metadata to the rowData related to the mean-variance relationship in the data.

rowData(sce)$mean_log <- rowMeans(logcounts(sce))
rowData(sce)$var_log <- apply(logcounts(sce), 1, var)

It is important to note that iSEE relies primarily on precomputed values stored in the various slots of objects derived from the SummarizedExperiment class2 Except when dealing with custom panels.. This allows users to visualize any metrics of interest, but also requires these to be calculated and added to the object before the initialization of the app. That said, it is straightforward to iteratively explore a precomputed object, take notes of new metrics to compute, close the app, store new results in the SummarizedExperiment object, and launch a new app using the updated object.

3 Launching the interface

To begin the exploration, we create an iSEE app with the SingleCellExperiment object generated above. In its simplest form, the iSEE function only requires the input object. However, iSEE applications can be extensively reconfigured using a number of optional arguments to the iSEE function.

app <- iSEE(sce)

The runApp function launches the app in our browser.

shiny::runApp(app)