NB-FOXR2 project [source]


1 Configuration

Configuration of project directory & analysis outputs:

Show full config

source(here("rr_helpers.R"))

# Set up outputs
message("Document index: ", doc_id)
## Document index: 06.2
# Specify where to save outputs
out        <- here("output", doc_id); dir.create(out, recursive = TRUE)
figout     <- here("figures", doc_id, "/")
cache      <- paste0("/project/kleinman/bhavyaa.chandarana/cache/NB-FOXR2/public/", doc_id, "/")

The root directory of this project is:

## /project/kleinman/bhavyaa.chandarana/from_hydra/2023-05-NB-FOXR2/public

Outputs and figures will be saved at these paths, relative to project root:

## public/output/06.2
## public/figures/06.2//

Setting a random seed:

set.seed(100)

2 Overview

This document explores projections/mapping of NB-FOXR2 tumors to normal normal development using single-cell RNAseq data.

Here, we will load and inspect cell type projections for single-cell NB-FOXR2 data. These projections were run with developing mouse forebrain as a reference atlas.

Projection was performed with CoRAL (v3.0.0, https://github.com/fungenomics/CoRAL/releases/tag/v3.0.0).

3 Libraries & functions

library(here)
library(magrittr)
library(tidyr)
library(dplyr)
library(readr)
library(readxl)
library(stringr)
library(glue)
library(purrr)
library(ggplot2)
library(ggrepel)
library(tibble)
library(broom)
library(cowplot)
library(Seurat)
library(Signac)
library(ComplexHeatmap)
library(data.table)
library(ggExtra)

source(here("include/style.R"))
source(here("code/functions/RNAseq.R"))
source(here("code/functions/scRNAseq.R"))
source(here("code/functions/ssGSEA.R"))

ggplot2::theme_set(theme_min())

square_theme <- theme(aspect.ratio = 1)
large_text <- theme(text = element_text(size = 15))

conflicted::conflicts_prefer(dplyr::filter)
# Function to load an RData file and return it
loadRData <- function(fileName){
  
  load(fileName)
  get(ls()[ls() != "fileName"])
  
}

4 Load data

Here, we load metadata and Seurat objects for single-cell profiles of tumors. We will load the individual tumors (n=6) as separate objects in a list, as well as a joined object of all tumors, without any batch correction or integration ("naive").

4.1 Metadata

Load list of single-cell tumor samples.

meta_sc <- read_tsv(here("output/00/metadata_patients_sc.tsv"))
## Rows: 16 Columns: 23
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (23): Sample, ID_Patient, ID_Sample, ID, FOXR2_positive, Group, Source, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
sc_samples_nb_foxr2 <- meta_sc %>% filter(Group == "NB-FOXR2") %>% pull(ID)

4.2 Single-cell objects

Load single-cell tumor per-cell metadata and Seurat objects.

# Load per-sample seurat objects
samples_sc <- map(sc_samples_nb_foxr2, ~ loadRData(meta_sc[meta_sc$ID == .x, ]$Path))
names(samples_sc) <- sc_samples_nb_foxr2

# Load merged object metadata
load(here("output/04/merged_sc_meta.Rda"))

# correct a discrepancy in how barcodes are named for the multiome sample
samples_sc$`P-6778_S-10155`@meta.data$cell.barcode <- samples_sc$`P-6778_S-10155`@meta.data$gex_barcode
merged_sc_meta <- merged_sc_meta %>%
    mutate(cell.barcode = ifelse(is.na(cell.barcode), gex_barcode, cell.barcode))

samples_sc <- map(samples_sc, function(seurat) {
    
    # sanity check that cell order is preserved in each metadata slot
    merged_barcodes <- merged_sc_meta %>% filter(cell.barcode %in% seurat@meta.data$cell.barcode) %>% pull(cell.barcode)
    all(seurat@meta.data$cell.barcode == merged_barcodes)
    
    tumor_normal <- merged_sc_meta %>% filter(cell.barcode %in% seurat@meta.data$cell.barcode) %>% pull(Malignant_normal)
    seurat <- AddMetaData(seurat, tumor_normal, "Malignant_normal")
    
    return(seurat)
    
})

Print number of cells per sample:

# print number of cells per sample
map(samples_sc, ncol)
## $NBFOXR2_6
## [1] 6340
## 
## $`P-2236_S-2236`
## [1] 13911
## 
## $`P-2273_S-2273`
## [1] 9653
## 
## $`P-6776_S-10153`
## [1] 857
## 
## $`P-6777_S-10154`
## [1] 1312
## 
## $`P-6778_S-10155`
## [1] 2647
# total number of cells in the analysis
map(samples_sc, ncol) %>% unname() %>% as.numeric() %>% sum()
## [1] 34720

4.3 Joint object

Load joint object (without batch correction or integration) - used in figures.

load(here("data/singlecell/integrations/NB-FOXR2_naive_join/output/seurat_joint.Rda"))
seurat_joint$Joint_cluster <- Idents(seurat_joint)

seurat_joint@meta.data <- merged_sc_meta 

# Sanity check: # cells in joint sample = total across individual samples
map(samples_sc, ncol) %>% unname() %>% as.numeric() %>% sum() == ncol(seurat_joint)
## [1] TRUE

5 Load reference information

Here, we load cell type categories and color palettes related to the developing murine brain atlas used as normal reference for this analysis, published in Jessa et al Nature Genetics 2022.

Since NB-FOXR2 are supratentorial tumors, we will only annotate cell types using forebrain reference (hindbrain data will be excluded).

Load the color palettes and cell type ontology for this reference.

# General broad palette
palette_broad_type <- c("Neuron" = "blue4",
                        "Glia" = "olivedrab3",
                        "Other" = "grey90",
                        "Unresolved" = "grey90",
                        "No consensus" = "grey90")

# Load Jessa forebrain palettes & cell type ontology
load(here("data/singlecell/references_normal/Jessa_NatGenet_2022/ontology_l2_palette.Rda"))

ontology_jessa <- ontology_jessa %>% select(Label, Label_broad = Label_broad_L3) %>% 
    tibble::add_row("Label" = "No consensus", "Label_broad" = "No consensus")
palette_jessa_l3 <- c(palette_jessa_l3, "No consensus" = "gray90", "Unresolved" = "gray90", "Mixed progenitors" = "yellow")

Set a mapping from Label_broad (level3) to broader cell classes (Neuron/Glia/Other):

jessa_broad <- ontology_jessa %>% 
    mutate(broad_label_Jessa = 
               
               case_when(Label_broad %in% c("MGE inhibitory neurons",
                                            "Excitatory IPC",
                                            "Cortical excitatory neurons",
                                            "Cortical inhibitory neurons",
                                            "Inhibitory IPC",
                                            "Cajal-Retzius neurons",
                                            "Other neurons",
                                            "Thalamic neurons",
                                            "Striatal spiny neurons")  ~ "Neuron",
                         
                         Label_broad %in% c("Astrocytes",
                                            "Ependymal",
                                            "OPC",
                                            "Oligodendrocytes",
                                            "Gliogenic progenitors")        ~ "Glia",
                         
                         Label_broad %in% c("Ventral RGC",
                                            "Dorsal RGC",
                                            "Cortical hem",
                                            "Rostral telencephalic midline",
                                            "Meninges",
                                            "Erythrocytes",
                                            "Endothelial",
                                            "Thalamic precursors",
                                            "Pericytes",
                                            "Immune",
                                            "Mixed progenitors",
                                            "Split cluster containing erythrocytes & neurons") ~ "Other",
                         
                         Label_broad %in% c("No consensus",
                                            "Unresolved")             ~ "No consensus",
                         
                         TRUE                                         ~ as.character(NA)
                         
                         )
            )

6 Load cell type annotation

Load the annotation labels output from CoRAL v3.0.0 (https://github.com/fungenomics/CoRAL/releases/tag/v3.0.0) run with developing mouse forebrain atlas as reference.

Here, we use a custom function get_consensus_labels (in code/functions/scRNAseq.R) to produce a consensus using broader class labels.

# Get consensus annotations in individual Seurat objects and add to each metadata

# Calculate majority vote consensus outside of CoRAL
samples_sc <- imap(samples_sc, function(seurat, alias) {

    print(alias)

    labels <- read_tsv(here(glue("data/singlecell/CoRAL/output/nbfoxr2_hg_Jessaforebrain/{alias}/JessaForebrain/majority/Prediction_Summary_base.tsv"))) %>%
        get_consensus_labels(tools_to_include = c("Correlation", "SciBet", "SVMlinear", "singleCellNet"),
                             remove_timepoint = FALSE,
                             high_level = TRUE,
                             ontology = ontology_jessa,
                             suffix = "braindex")

    labels$Consensus_broad_braindex <- factor(labels$Consensus_broad_braindex, levels = names(palette_jessa_l3))
    labels <- labels %>% tibble::column_to_rownames(var = "Cell")
    seurat <- AddMetaData(seurat, labels)

})

Summarize these labels further to broad annotation (Neuron/Glia/Other) as per ontology in section 5.

samples_sc <- map(samples_sc,
                    function(seurat){
                        
                        x <- seurat@meta.data %>% 
                            select("Consensus_broad_braindex") %>% 
                            rownames_to_column("Cell") %>% 
                            left_join(., jessa_broad %>% select(Label_broad, broad_label_Jessa) %>% distinct(),
                                      by = c("Consensus_broad_braindex" = "Label_broad")) %>% 
                            select(-Consensus_broad_braindex) %>% 
                            column_to_rownames("Cell")
                        
                        x$broad_label_Jessa <- factor(x$broad_label_Jessa, levels = rev(names(palette_broad_type)))
                        
                        seurat <- AddMetaData(seurat, x)
                    
                        return(seurat)    
                        
                    }
)

Transfer cell type annotation columns from individual sample objects to joint object.

# Bind together individual sample metadata
# Join it to the right of the seurat_joint metadata
# (preserving the cell order of the joint metadata)
joint_anno <- imap(samples_sc, ~ .x@meta.data %>% 
                      select(cell.barcode, 
                             Consensus_broad_braindex, 
                             broad_label_Jessa) %>% 
                       mutate(Sample = .y)) %>% 
    Reduce(rbind, .) %>% 
    left_join(seurat_joint@meta.data, ., by = c("cell.barcode", "Sample")) %>% 
    select(Consensus_broad_braindex, 
             broad_label_Jessa)

rownames(joint_anno) <- rownames(seurat_joint@meta.data)

joint_anno$Consensus_broad_braindex <- factor(joint_anno$Consensus_broad_braindex, levels = names(palette_jessa_l3))
joint_anno$broad_label_Jessa <- factor(joint_anno$broad_label_Jessa, levels = names(palette_broad_type))

seurat_joint <- AddMetaData(seurat_joint, joint_anno)

7 Plot cell type annotation

Here, we visualize consensus cell type annotations produced through CoRAL (majority vote).

Define helper functions:

Define a function for bar plot of distribution of cell type annotation in malignant cells.

Plot the following cell types (in order), plus any other cell types which have > 2% of sample:

  • "MGE inhibitory neurons"
  • "Cortical excitatory neurons"
  • "Other neurons"
  • "Inhibitory IPC"
  • "OPC"
  • "Astrocytes"
  • "Oligodendrocytes"
# Function to plot malignant cells only in a bar plot
plot_by_label_bar_mal_only <- function(seurat, id, min_cells, column) {

   # Place these cell types in every plot, in the same order, to facilitate comparison between samples
    all_plots <- c("MGE inhibitory neurons",
                   "Cortical excitatory neurons",
                   "Other neurons",
                   "Inhibitory IPC",
                   "OPC",
                   "Astrocytes",
                   "Oligodendrocytes")
    order <- c(all_plots, setdiff(names(palette),
                             all_plots))
    order <- setdiff(order, "No consensus")

    # drop cell types with few cells, and no consensus cells
    types_keep <- table(subset(seurat, subset = Malignant_normal == "Malignant")[[column]])
    types_keep <- names(types_keep)[types_keep > min_cells]
    types_keep <- setdiff(types_keep, "No consensus")

    # Ensure all cell types in list "all_plots" are present even if <= min_cells
    # Add any extra cell types which are > min_cells
    order <- union(all_plots, setdiff(types_keep, all_plots))

    p1 <- seurat@meta.data %>%
        select(c(column, "Malignant_normal")) %>%
        rename(Label = column) %>% 
        filter(Label %in% order) %>%
        filter(Malignant_normal == "Malignant") %>%
        mutate(Label = factor(Label, levels = rev(order))) %>%
        ggplot(aes(x = Label)) +
          geom_bar(aes(fill = Label), width = 0.5) +
          scale_fill_manual(values = palette_jessa_l3) +
          theme_min2() +
          coord_flip() +
          no_legend() +
          ggtitle(id) +
          scale_x_discrete(order, drop = FALSE) +
          xlab(column) + ylab("# cells") +
          theme(axis.title.y=element_blank()) +
          rotate_x()

  p1 + large_text

}

7.1 Jessa forebrain

Tools run through CoRAL:

  • Correlation
  • SciBet
  • SVMlinear
  • singleCellNet

Plot all tumor samples in a joint space.

Remove cells labeled as "No consensus", and set color of normal cells to grey.

umap(subset(seurat_joint, subset = Consensus_broad_braindex != "No consensus"), 
        color_by = "Consensus_broad_braindex",
        colors = palette_jessa_l3,
        alpha = 0.5, label = FALSE, point_size = 1, legend = TRUE,
        # rasterize points
        rasterize = TRUE,
        na_color = "grey80",
        title = "Joint human NB-FOXR2",
        cells = Seurat::WhichCells(seurat_joint, expression = Malignant_normal == "Malignant")) +
    theme(legend.position = "bottom") +
    mod_legend_col(title = NULL) +
    square_theme +
    large_text

Plot the individual samples separately.

# Consensus cell type labels
imap(samples_sc,
     function(seurat, id) {
         
        umap(subset(seurat, 
                    subset = Consensus_broad_braindex != "No consensus"), 
            color_by = "Consensus_broad_braindex",
            colors = palette_jessa_l3,
            alpha = 0.5, label = FALSE, point_size = 1, legend = TRUE,
            # rasterize points
            rasterize = TRUE,
            na_color = "grey80",
            title = id,
            cells = Seurat::WhichCells(seurat, expression = Malignant_normal == "Malignant")) +
        theme(legend.position = "bottom") +
        mod_legend_col(title = NULL) +
        square_theme +
        large_text
         
    }) %>%
      {plot_grid(plotlist = ., nrow = 1, align = "h", axis = "tb")}

In malignant cells only, plot the distribution of the following cell types (in order), plus any other cell types which have > 2% of sample or more cells:

  • "MGE inhibitory neurons"
  • "Cortical excitatory neurons"
  • "Other neurons"
  • "Inhibitory IPC"
  • "OPC"
  • "Astrocytes"
  • "Oligodendrocytes"
column <- "Consensus_broad_braindex"

imap(samples_sc, ~ plot_by_label_bar_mal_only(seurat = .x,
                                  id = .y,
                                  min_cells = 0.02*ncol(.x),
                                  column = column))  %>%
  {plot_grid(plotlist = ., nrow = 1, align = "h", axis = "tb")}

In malignant cells only, plot the distribution of all cell types.

column <- "Consensus_broad_braindex"

imap(samples_sc, ~ plot_by_label_bar_mal_only(seurat = .x,
                                  id = .y,
                                  min_cells = 0,
                                  column = column))  %>%
  {plot_grid(plotlist = ., nrow = 1, align = "h", axis = "tb")}

Produce faceted UMAP plots to color each cell type separately:

map(unique(seurat_joint$Consensus_broad_braindex),
           function(i) {

                cells <- Seurat::WhichCells(seurat_joint, expression = Consensus_broad_braindex == i)
                umap(seurat_joint,
                     color_by = "Consensus_broad_braindex",
                     colors = "#000000",
                     cells = cells,
                     rasterize = TRUE,
                     point_size = 0.8,
                     # put cells not selected in grey
                     na_color = "grey80",
                     label = FALSE,
                     legend = FALSE,
                     title = glue("{i} - {length(cells)} cells"),
                     hide_axes = T) +
                    square_theme +
                    large_text

           }) %>%
            cowplot::plot_grid(plotlist = ., nrow = 4, ncol = 4)

8 Calculate cell type proportions

It seems that most samples are predominantly composed of cells projected to MGE inhibitory neurons.

To confirm, we will calculate and print the percentage of cells per sample with this label, excluding the cells with "No consensus" label in the total cells per sample. For each sample we will also save a table counting number of cells per cell type.

We will use predictions from the majority vote consensus.

# Set desired order of cell types
jessa_celltype_order <- c("MGE inhibitory neurons",
                      "Oligodendrocytes",
                      "OPC",
                      "Inhibitory IPC",
                   "Cortical excitatory neurons",
                   "Other neurons",
                   "Astrocytes",
                   "Cortical inhibitory neurons",
                   "Striatal spiny neurons",
                   "Thalamic neurons",
                   "Cajal-Retzius neurons",
                   "Excitatory IPC",
                   "Ventral RGC",
                   "Dorsal RGC",
                   "Cortical hem",
                   "Rostral telencephalic midline",
                   "Thalamic precursors",
                   "Gliogenic progenitors",
                   "Ependymal", 
                   "Endothelial",
                   "Pericytes",
                   "Immune",
                   "Meninges",
                   "Mixed progenitors", 
                   "No consensus",
                   "Unresolved")

# Add new metadata column to each sample with the anonymized sample name
for(sample_name in names(samples_sc)){
  
  samples_sc[[sample_name]]@meta.data <- 
    samples_sc[[sample_name]]@meta.data %>% 
    mutate(sample_id_paper = sample_name)
  
}

# Loop through samples, calculate proportion MGE, and write full
for (sample in names(samples_sc)){
  
  seurat <- samples_sc[[sample]]

  print(seurat@meta.data[["sample_id_paper"]] %>% unique)
  
  proportion <- seurat@meta.data %>% 
      select(Malignant_normal, Consensus_broad_braindex) %>% 
      filter(Malignant_normal == "Malignant") %>% 
      table() %>% 
      as.data.frame()

  proportion_excl_no_consensus <- proportion %>% 
    filter(Consensus_broad_braindex != "No consensus")
  
  percent_mge_excl_no_consensus <- (proportion_excl_no_consensus[which(proportion_excl_no_consensus$Consensus_broad_braindex == "MGE inhibitory neurons"),]$Freq)/(sum(proportion_excl_no_consensus$Freq))
  
  # Proportion values per sample
  print(c("% malignant cells labeled MGE, excluding cells with no consensus" = percent_mge_excl_no_consensus))

  # Save table of # cells per cell type a tsv file
  rownames(proportion) <-
  proportion %>% 
      rr_write_tsv(path = glue("{out}/NB-FOXR2-{sample}-cell-type-distribution.tsv"),
                   desc = glue("Number of malignant cells per projected cell type in NB-FOXR2 sample {sample}"))
  
}
## [1] "NBFOXR2_6"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                        0.5949729
## ...writing description of NB-FOXR2-NBFOXR2_6-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-NBFOXR2_6-cell-type-distribution.desc
## [1] "P-2236_S-2236"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                        0.5700052
## ...writing description of NB-FOXR2-P-2236_S-2236-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-P-2236_S-2236-cell-type-distribution.desc
## [1] "P-2273_S-2273"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                        0.8561583
## ...writing description of NB-FOXR2-P-2273_S-2273-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-P-2273_S-2273-cell-type-distribution.desc
## [1] "P-6776_S-10153"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                        0.7011309
## ...writing description of NB-FOXR2-P-6776_S-10153-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-P-6776_S-10153-cell-type-distribution.desc
## [1] "P-6777_S-10154"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                        0.4056886
## ...writing description of NB-FOXR2-P-6777_S-10154-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-P-6777_S-10154-cell-type-distribution.desc
## [1] "P-6778_S-10155"
## % malignant cells labeled MGE, excluding cells with no consensus 
##                                                       0.05577957
## ...writing description of NB-FOXR2-P-6778_S-10155-cell-type-distribution.tsv to public/output/06.2/NB-FOXR2-P-6778_S-10155-cell-type-distribution.desc

9 Plot gene expression

Here, we investigate the expression of specific gene markers in single cell tumor profiles.

9.1 MDM4 expression

Plot MDM4 expression in tumor cells of each single-cell sample.

# Get color palette for single-cell samples
palette_sample <- read_tsv(here("output/00/sc_info.samples.tsv")) %>% 
    select(Sample, Color) %>% tibble::deframe()
## Rows: 6 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (5): Path, Sample, Technology, Group, Color
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
VlnPlot(object = subset(seurat_joint, Malignant_normal == "Malignant"),
        features = c("MDM4"), cols = palette_sample,
        group.by = "Sample",pt.size = 0)

9.2 Neuronal markers

Plot interneuron and excitatory neuron marker expression in malignant cell types per sample.

# Set neuronal gene markers
min_markers <- c("SNAP25", "STMN2", # Pan-neuronal
                 "GAD1", "GAD2", # pan-GABAergic
                 "DLX5", "DLX6", # TF fingerprint
                 "LHX6", "SST", "NXPH1", # interneuron
                 "SLC17A7") # pan-glutamatergic

# Plot violin grid with 1 row per sample with final anonymized names
(p <- violin_grid(seurat = subset(seurat_joint, Malignant_normal == "Malignant"),
            genes       = min_markers,
            order       = "group",
            group_col   = "Sample",
            points      = FALSE,
            title       = "Malignant cells per sample",
            scale       = "width",
            colours = palette_sample,
            gene_angle  = 90) + large_text)

10 Save metadata

seurat_tumor_metadata <- map(samples_sc, 
                             function(seurat) {
                                 meta <- seurat@meta.data %>% 
                                     as.data.frame() %>% 
                                     rownames_to_column("Cell")
                                 rownames(meta) <- NULL
                                 return(meta)
                            })
save(seurat_tumor_metadata, file = glue("{out}/seurat_tumor_metadata.Rda"))

seurat_tumor_metadata_joint <- seurat_joint@meta.data %>% 
                                     as.data.frame() %>% 
                                     rownames_to_column("Cell")
rownames(seurat_tumor_metadata_joint) <- NULL
save(seurat_tumor_metadata_joint, file = glue("{out}/seurat_tumor_metadata_joint.Rda"))

These can be added back to the objects as follows:

load(glue("{out}/seurat_tumor_metadata.Rda"))
samples_sc <- map2(samples_sc, seurat_tumor_metadata,
                     function(seurat, meta) {
                         
                         seurat@meta.data <- meta %>% 
                             column_to_rownames("Cell")
                         
                         return(seurat)
                         
                     })

load(glue("{out}/seurat_tumor_metadata_joint.Rda"))
seurat_joint@meta.data <- seurat_tumor_metadata_joint %>%
                             column_to_rownames("Cell")

11 Reproducibility

This document was last rendered on:

## 2024-11-05 10:54:19

The git repository and last commit:

## Local:    main /project/kleinman/bhavyaa.chandarana/from_hydra/2023-05-NB-FOXR2/public
## Remote:   main @ origin (https://github.com/fungenomics/NB-FOXR2.git)
## Head:     [72d1c5c] 2024-11-04: Add DOI badge

The random seed was set with set.seed(100)

The R session info:

## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value
##  version  R version 4.1.2 (2021-11-01)
##  os       Rocky Linux 8.10 (Green Obsidian)
##  system   x86_64, linux-gnu
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  ctype    en_US.UTF-8
##  tz       America/Toronto
##  date     2024-11-05
##  pandoc   1.19.2.1 @ /cvmfs/soft.computecanada.ca/gentoo/2020/usr/bin/ (via rmarkdown)
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  ! package          * version  date (UTC) lib source
##  P abind              1.4-5    2016-07-21 [?] CRAN (R 4.1.2)
##  P backports          1.4.1    2021-12-13 [?] CRAN (R 4.1.2)
##  P beeswarm           0.4.0    2021-06-01 [?] CRAN (R 4.1.2)
##  P BiocGenerics       0.40.0   2021-10-26 [?] Bioconductor
##  P BiocManager        1.30.15  2021-05-11 [?] CRAN (R 4.1.2)
##  P BiocParallel       1.28.3   2021-12-09 [?] Bioconductor
##  P Biostrings         2.62.0   2021-10-26 [?] Bioconductor
##  P bit                4.0.4    2020-08-04 [?] CRAN (R 4.1.2)
##  P bit64              4.0.5    2020-08-30 [?] CRAN (R 4.1.2)
##  P bitops             1.0-7    2021-04-24 [?] CRAN (R 4.1.2)
##  P broom            * 1.0.1    2022-08-29 [?] CRAN (R 4.1.2)
##  P bslib              0.3.1    2021-10-06 [?] CRAN (R 4.1.2)
##  P cachem             1.0.6    2021-08-19 [?] CRAN (R 4.1.2)
##  P Cairo              1.6-0    2022-07-05 [?] CRAN (R 4.1.2)
##  P callr              3.7.6    2024-03-25 [?] RSPM
##  P cellranger         1.1.0    2016-07-27 [?] CRAN (R 4.1.2)
##  P circlize           0.4.15   2022-05-10 [?] CRAN (R 4.1.2)
##  P cli                3.6.1    2023-03-23 [?] RSPM (R 4.1.2)
##  P clue               0.3-64   2023-01-31 [?] CRAN (R 4.1.2)
##  P cluster            2.1.2    2021-04-17 [?] CRAN (R 4.1.2)
##  P codetools          0.2-18   2020-11-04 [?] CRAN (R 4.1.2)
##  P colorspace         2.0-2    2021-06-24 [?] CRAN (R 4.1.2)
##  P ComplexHeatmap   * 2.10.0   2021-10-26 [?] Bioconductor
##  P conflicted         1.2.0    2023-02-01 [?] CRAN (R 4.1.2)
##  P cowplot          * 1.1.1    2020-12-30 [?] CRAN (R 4.1.2)
##  P crayon             1.4.2    2021-10-29 [?] CRAN (R 4.1.2)
##  P data.table       * 1.14.2   2021-09-27 [?] CRAN (R 4.1.2)
##  P deldir             1.0-6    2021-10-23 [?] CRAN (R 4.1.2)
##  P devtools           2.4.5    2022-10-11 [?] CRAN (R 4.1.2)
##  P digest             0.6.35   2024-03-11 [?] CRAN (R 4.1.2)
##  P docopt             0.7.1    2020-06-24 [?] CRAN (R 4.1.2)
##  P doParallel         1.0.16   2020-10-16 [?] CRAN (R 4.1.2)
##  P dplyr            * 1.1.1    2023-03-22 [?] CRAN (R 4.1.2)
##  P ellipsis           0.3.2    2021-04-29 [?] CRAN (R 4.1.2)
##  P evaluate           0.23     2023-11-01 [?] CRAN (R 4.1.2)
##  P fansi              1.0.2    2022-01-14 [?] CRAN (R 4.1.2)
##  P farver             2.1.0    2021-02-28 [?] CRAN (R 4.1.2)
##  P fastmap            1.1.0    2021-01-25 [?] CRAN (R 4.1.2)
##  P fastmatch          1.1-3    2021-07-23 [?] CRAN (R 4.1.2)
##  P fitdistrplus       1.1-6    2021-09-28 [?] CRAN (R 4.1.2)
##  P foreach            1.5.1    2020-10-15 [?] CRAN (R 4.1.2)
##  P fs                 1.5.2    2021-12-08 [?] CRAN (R 4.1.2)
##  P future             1.25.0   2022-04-24 [?] CRAN (R 4.1.2)
##  P future.apply       1.8.1    2021-08-10 [?] CRAN (R 4.1.2)
##  P generics           0.1.3    2022-07-05 [?] CRAN (R 4.1.2)
##  P GenomeInfoDb       1.30.1   2022-01-30 [?] Bioconductor
##  P GenomeInfoDbData   1.2.4    2023-11-28 [?] Bioconductor
##  P GenomicRanges      1.46.1   2021-11-18 [?] Bioconductor
##  P GetoptLong         1.0.5    2020-12-15 [?] CRAN (R 4.1.2)
##  P ggbeeswarm         0.7.1    2022-12-16 [?] CRAN (R 4.1.2)
##  P ggExtra          * 0.10.0   2022-03-23 [?] CRAN (R 4.1.2)
##  P ggforce            0.3.3    2021-03-05 [?] CRAN (R 4.1.2)
##  P ggplot2          * 3.4.2    2023-04-03 [?] CRAN (R 4.1.2)
##  P ggrastr            1.0.1    2021-12-08 [?] CRAN (R 4.1.2)
##  P ggrepel          * 0.9.1    2021-01-15 [?] CRAN (R 4.1.2)
##  P ggridges           0.5.3    2021-01-08 [?] CRAN (R 4.1.2)
##  P ggseqlogo          0.1      2017-07-25 [?] CRAN (R 4.1.2)
##  P git2r              0.29.0   2021-11-22 [?] CRAN (R 4.1.2)
##  P GlobalOptions      0.1.2    2020-06-10 [?] CRAN (R 4.1.2)
##  P globals            0.14.0   2020-11-22 [?] CRAN (R 4.1.2)
##  P glue             * 1.6.2    2022-02-24 [?] CRAN (R 4.1.2)
##  P goftest            1.2-3    2021-10-07 [?] CRAN (R 4.1.2)
##  P gridExtra          2.3      2017-09-09 [?] CRAN (R 4.1.2)
##  P gtable             0.3.0    2019-03-25 [?] CRAN (R 4.1.2)
##  P here             * 1.0.1    2020-12-13 [?] CRAN (R 4.1.2)
##  P highr              0.9      2021-04-16 [?] CRAN (R 4.1.2)
##  P hms                1.1.1    2021-09-26 [?] CRAN (R 4.1.2)
##  P htmltools          0.5.2    2021-08-25 [?] CRAN (R 4.1.2)
##  P htmlwidgets        1.5.4    2021-09-08 [?] CRAN (R 4.1.2)
##  P httpuv             1.6.5    2022-01-05 [?] CRAN (R 4.1.2)
##  P httr               1.4.2    2020-07-20 [?] CRAN (R 4.1.2)
##  P ica                1.0-2    2018-05-24 [?] CRAN (R 4.1.2)
##  P igraph             2.0.3    2024-03-13 [?] CRAN (R 4.1.2)
##  P IRanges            2.28.0   2021-10-26 [?] Bioconductor
##  P irlba              2.3.5    2021-12-06 [?] CRAN (R 4.1.2)
##  P iterators          1.0.13   2020-10-15 [?] CRAN (R 4.1.2)
##  P jquerylib          0.1.4    2021-04-26 [?] CRAN (R 4.1.2)
##  P jsonlite           1.8.8    2023-12-04 [?] CRAN (R 4.1.2)
##  P KernSmooth         2.23-20  2021-05-03 [?] CRAN (R 4.1.2)
##  P knitr              1.37     2021-12-16 [?] CRAN (R 4.1.2)
##  P labeling           0.4.2    2020-10-20 [?] CRAN (R 4.1.2)
##  P later              1.3.0    2021-08-18 [?] CRAN (R 4.1.2)
##  P lattice            0.20-45  2021-09-22 [?] CRAN (R 4.1.2)
##  P lazyeval           0.2.2    2019-03-15 [?] CRAN (R 4.1.2)
##  P leiden             0.3.9    2021-07-27 [?] CRAN (R 4.1.2)
##  P lifecycle          1.0.3    2022-10-07 [?] CRAN (R 4.1.2)
##  P listenv            0.8.0    2019-12-05 [?] CRAN (R 4.1.2)
##  P lmtest             0.9-39   2021-11-07 [?] CRAN (R 4.1.2)
##  P lsa                0.73.2   2020-05-04 [?] CRAN (R 4.1.2)
##  P magrittr         * 2.0.3    2022-03-30 [?] CRAN (R 4.1.2)
##  P MASS               7.3-54   2021-05-03 [?] CRAN (R 4.1.2)
##  P Matrix             1.3-4    2021-06-01 [?] CRAN (R 4.1.2)
##  P matrixStats        0.61.0   2021-09-17 [?] CRAN (R 4.1.2)
##  P memoise            2.0.1    2021-11-26 [?] CRAN (R 4.1.2)
##  P mgcv               1.8-38   2021-10-06 [?] CRAN (R 4.1.2)
##  P mime               0.12     2021-09-28 [?] CRAN (R 4.1.2)
##  P miniUI             0.1.1.1  2018-05-18 [?] CRAN (R 4.1.2)
##  P munsell            0.5.0    2018-06-12 [?] CRAN (R 4.1.2)
##  P nlme               3.1-153  2021-09-07 [?] CRAN (R 4.1.2)
##  P parallelly         1.30.0   2021-12-17 [?] CRAN (R 4.1.2)
##  P patchwork          1.1.1    2020-12-17 [?] CRAN (R 4.1.2)
##  P pbapply          * 1.5-0    2021-09-16 [?] CRAN (R 4.1.2)
##  P pillar             1.9.0    2023-03-22 [?] RSPM (R 4.1.2)
##  P pkgbuild           1.4.2    2023-06-26 [?] CRAN (R 4.1.2)
##  P pkgconfig          2.0.3    2019-09-22 [?] CRAN (R 4.1.2)
##  P pkgload            1.3.3    2023-09-22 [?] CRAN (R 4.1.2)
##  P plotly             4.10.0   2021-10-09 [?] CRAN (R 4.1.2)
##  P plyr               1.8.6    2020-03-03 [?] CRAN (R 4.1.2)
##  P png                0.1-7    2013-12-03 [?] CRAN (R 4.1.2)
##  P polyclip           1.10-0   2019-03-14 [?] CRAN (R 4.1.2)
##  P prettyunits        1.1.1    2020-01-24 [?] CRAN (R 4.1.2)
##  P processx           3.8.4    2024-03-16 [?] RSPM
##  P profvis            0.3.8    2023-05-02 [?] CRAN (R 4.1.2)
##  P promises           1.2.0.1  2021-02-11 [?] CRAN (R 4.1.2)
##  P ps                 1.7.6    2024-01-18 [?] RSPM
##  P purrr            * 1.0.1    2023-01-10 [?] CRAN (R 4.1.2)
##  P qlcMatrix          0.9.7    2018-04-20 [?] CRAN (R 4.1.2)
##  P R6                 2.5.1    2021-08-19 [?] CRAN (R 4.1.2)
##  P RANN               2.6.1    2019-01-08 [?] CRAN (R 4.1.2)
##  P RColorBrewer     * 1.1-2    2014-12-07 [?] CRAN (R 4.1.2)
##  P Rcpp               1.0.8    2022-01-13 [?] CRAN (R 4.1.2)
##  P RcppAnnoy          0.0.19   2021-07-30 [?] CRAN (R 4.1.2)
##  P RcppRoll           0.3.0    2018-06-05 [?] CRAN (R 4.1.2)
##  P RCurl              1.98-1.5 2021-09-17 [?] CRAN (R 4.1.2)
##  P readr            * 2.1.1    2021-11-30 [?] CRAN (R 4.1.2)
##  P readxl           * 1.3.1    2019-03-13 [?] CRAN (R 4.1.2)
##  P remotes            2.4.2.1  2023-07-18 [?] CRAN (R 4.1.2)
##  P renv               1.0.3    2023-09-19 [?] CRAN (R 4.1.2)
##  P reshape2           1.4.4    2020-04-09 [?] CRAN (R 4.1.2)
##  P reticulate         1.23     2022-01-14 [?] CRAN (R 4.1.2)
##  P rjson              0.2.21   2022-01-09 [?] CRAN (R 4.1.2)
##  P rlang              1.1.3    2024-01-10 [?] CRAN (R 4.1.2)
##  P rmarkdown          2.11     2021-09-14 [?] CRAN (R 4.1.2)
##  P ROCR               1.0-11   2020-05-02 [?] CRAN (R 4.1.2)
##  P rpart              4.1-15   2019-04-12 [?] CRAN (R 4.1.2)
##  P rprojroot          2.0.2    2020-11-15 [?] CRAN (R 4.1.2)
##  P Rsamtools          2.10.0   2021-10-26 [?] Bioconductor
##  P Rtsne              0.15     2018-11-10 [?] CRAN (R 4.1.2)
##  P S4Vectors          0.32.4   2022-03-24 [?] Bioconductor
##  P sass               0.4.0    2021-05-12 [?] CRAN (R 4.1.2)
##  P scales             1.2.1    2022-08-20 [?] CRAN (R 4.1.2)
##  P scattermore        0.7      2020-11-24 [?] CRAN (R 4.1.2)
##  P sctransform        0.3.3    2022-01-13 [?] CRAN (R 4.1.2)
##  P sessioninfo        1.2.2    2021-12-06 [?] CRAN (R 4.1.2)
##  P Seurat           * 4.0.0    2021-01-30 [?] CRAN (R 4.1.2)
##  P SeuratObject     * 4.0.4    2021-11-23 [?] CRAN (R 4.1.2)
##  P shape              1.4.6    2021-05-19 [?] CRAN (R 4.1.2)
##  P shiny              1.7.1    2021-10-02 [?] CRAN (R 4.1.2)
##  P Signac           * 1.3.0    2021-07-12 [?] CRAN (R 4.1.2)
##  P slam               0.1-50   2022-01-08 [?] CRAN (R 4.1.2)
##  P SnowballC          0.7.0    2020-04-01 [?] CRAN (R 4.1.2)
##  P sparsesvd          0.2      2019-07-15 [?] CRAN (R 4.1.2)
##  P spatstat           1.64-1   2020-05-12 [?] CRAN (R 4.1.2)
##  P spatstat.data      2.1-2    2021-12-17 [?] CRAN (R 4.1.2)
##  P spatstat.utils     2.3-0    2021-12-12 [?] CRAN (R 4.1.2)
##  P stringi            1.7.6    2021-11-29 [?] CRAN (R 4.1.2)
##  P stringr          * 1.5.0    2022-12-02 [?] CRAN (R 4.1.2)
##  P survival           3.2-13   2021-08-24 [?] CRAN (R 4.1.2)
##  P tensor             1.5      2012-05-05 [?] CRAN (R 4.1.2)
##  P tibble           * 3.2.1    2023-03-20 [?] RSPM (R 4.1.2)
##  P tidyr            * 1.3.0    2023-01-24 [?] CRAN (R 4.1.2)
##  P tidyselect         1.2.0    2022-10-10 [?] CRAN (R 4.1.2)
##  P tweenr             1.0.2    2021-03-23 [?] CRAN (R 4.1.2)
##  P tzdb               0.3.0    2022-03-28 [?] CRAN (R 4.1.2)
##  P urlchecker         1.0.1    2021-11-30 [?] CRAN (R 4.1.2)
##  P usethis            2.2.2    2023-07-06 [?] CRAN (R 4.1.2)
##  P utf8               1.2.2    2021-07-24 [?] CRAN (R 4.1.2)
##  P uwot               0.1.11   2021-12-02 [?] CRAN (R 4.1.2)
##  P vctrs              0.6.5    2023-12-01 [?] CRAN (R 4.1.2)
##  P vipor              0.4.5    2017-03-22 [?] CRAN (R 4.1.2)
##  P viridis          * 0.5.1    2018-03-29 [?] RSPM (R 4.1.2)
##  P viridisLite      * 0.3.0    2018-02-01 [?] CRAN (R 4.1.2)
##  P vroom              1.5.7    2021-11-30 [?] CRAN (R 4.1.2)
##  P withr              2.5.0    2022-03-03 [?] CRAN (R 4.1.2)
##  P xfun               0.29     2021-12-14 [?] CRAN (R 4.1.2)
##  P xtable             1.8-4    2019-04-21 [?] CRAN (R 4.1.2)
##  P XVector            0.34.0   2021-10-26 [?] Bioconductor
##  P yaml               2.2.1    2020-02-01 [?] CRAN (R 4.1.2)
##  P zlibbioc           1.40.0   2021-10-26 [?] Bioconductor
##  P zoo                1.8-9    2021-03-09 [?] CRAN (R 4.1.2)
## 
##  [1] /project/kleinman/bhavyaa.chandarana/from_hydra/2023-05-NB-FOXR2/public/renv/library/R-4.1/x86_64-pc-linux-gnu
##  [2] /home/kleinman/bhavyaa.chandarana/.cache/R/renv/sandbox/R-4.1/x86_64-pc-linux-gnu/145cef2c
## 
##  P ── Loaded and on-disk path mismatch.
## 
## ──────────────────────────────────────────────────────────────────────────────


A project of the Kleinman Lab at McGill University, using the rr reproducible research template.