Yan, L., Yang, M., Guo, H., Yang, L., Wu, J., Li, R., Liu, P., Lian, Y., Zheng, X., Yan, J., et al. (2013). Single-cell RNA-Seq profiling of human preimplantation embryos and embryonic stem cells. Nat. Struct. Mol. Biol. 20, 1131–1139.


BioProject Accession: PRJNA153427
GEO Accession: GSE36552




Load required packages.

library(tidyverse)
library(magrittr)
library(Matrix)
library(Seurat)
library(extrafont)
library(patchwork)
Sys.Date()
## [1] "2020-07-29"

Data preparation

SEED_USE <- 20200616
MINIMAL_NUM_CELLS_REQUIRED_FOR_GENE <- 30
MINIMAL_NUM_COUNTS_REQUIRED_FOR_GENE <- 60

Functions loading

source(
    file = file.path(
        SCRIPT_DIR,
        "utilities.R"
    )
)

Data loading

Prepare metadata for single cells.

cell_metadata <- read_delim(
    file = "SraRunTable.txt",
    delim = ","
)
## Parsed with column specification:
## cols(
##   .default = col_character(),
##   AvgSpotLen = col_double(),
##   Bases = col_double(),
##   Bytes = col_double(),
##   ReleaseDate = col_datetime(format = "")
## )
## See spec(...) for full column specifications.
cell_metadata %<>%
    select(
        Run,
        `Library Name`,
        Cell_type,
        tissue
    ) %>%
    rename(
        cell = Run,
        cell_type = Cell_type,
        library_name = `Library Name`
    ) %>%
    mutate(
        sample = library_name,
        sample = str_replace(string = sample, pattern = "e#", replacement = "e_"),
        sample = str_remove(string = sample, pattern = "-Cell"),
        sample = str_remove(string = sample, pattern = "#.+$"),
        sample = str_remove(string = sample, pattern = ".+: "),
        sample = str_trim(string = sample)
    ) %>%
    mutate(
        sample = dplyr::case_when(
            sample %in% c("4-cell embryo") ~ "4-cell",
            sample %in% c("8-cell embryo") ~ "8-cell",
            sample %in% c("ES p0") ~ "hESC passage_0",
            sample %in% c("Morulae") ~ "Morula",
            TRUE ~ .$sample
        ),
        sample = str_replace(string = sample, pattern = "_", replacement = " ")
    ) %>%
    arrange(cell)


cell_metadata %>%
    head()

Load featureCounts output.

matrix_readcount_use <- read_delim(
    file = "matrix/xaa_Aligned.sortedByCoord.out_deduped_q10_gene_id_featureCounts.txt.gz",
    delim = "\t",
    col_names = TRUE,
    skip = 1
) %>%
    select(-(2:6))
## Parsed with column specification:
## cols(
##   .default = col_double(),
##   Geneid = col_character(),
##   Chr = col_character(),
##   Start = col_character(),
##   End = col_character(),
##   Strand = col_character()
## )
## See spec(...) for full column specifications.
colnames(matrix_readcount_use) <- colnames(matrix_readcount_use) %>%
    str_remove(pattern = "_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam") %>%
    str_remove(pattern = "../aln/")


matrix_readcount_use <- Matrix(
    data = as.matrix(matrix_readcount_use[, -1]),
    dimnames = list(
        matrix_readcount_use$Geneid,
        colnames(matrix_readcount_use)[-1]
    ),
    sparse = TRUE
)

matrix_readcount_use <- matrix_readcount_use[, colnames(matrix_readcount_use)]
matrix_readcount_use %>%
    dim()
## [1] 33538   124
rownames(matrix_readcount_use) <- paste(
    gene_symbo_info$X1,
    gene_symbo_info$X2,
    sep = "_"
)
matrix_readcount_use[1:10, 1:10]
## 10 x 10 sparse Matrix of class "dgCMatrix"
##    [[ suppressing 10 column names 'SRR445718', 'SRR445719', 'SRR445720' ... ]]
##                                                                    
## ENSG00000243485_MIR1302-2HG   .   .   .   .   .   4   .   .   .   .
## ENSG00000237613_FAM138A       .   .   .   4   .   2   2   8   .   7
## ENSG00000186092_OR4F5         .   .   .   .   .   .   .   .   .   .
## ENSG00000238009_AL627309.1  285 282 317 449 470 472 565 605 455 512
## ENSG00000239945_AL627309.3    .   .   .   .   .   .   .   .   .   .
## ENSG00000239906_AL627309.2    .   .   .   .   .   .   .   .   .   .
## ENSG00000241599_AL627309.4    .   .   .   .   .   .   .   .   .   .
## ENSG00000236601_AL732372.1    .   .   .   .   .   .   .   .   .   .
## ENSG00000284733_OR4F29        .   .   .   .   .   .   .   1   .   .
## ENSG00000235146_AC114498.1    .   2   1   1   .   .   .   .   1   .

Preprocessing

Summarize sequencing statistics.

cell_metadata %>%
    mutate(
        num_umis = matrix_readcount_use[, cell] %>% colSums(),
        num_genes = (matrix_readcount_use[, cell] > 0) %>% colSums()
    ) %>%
    mutate(
        sample = factor(
            sample,
            levels = c(
                "Oocyte",
                "Zygote",
                "2-cell",
                "4-cell",
                "8-cell",
                "Morula",
                "Late blastocyst",
                "hESC passage 0",
                "hESC passage 10"
            )
        )
    ) %>%
    group_by(sample) %>%
    summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        median_genes = median(num_genes),
    )
## `summarise()` ungrouping output (override with `.groups` argument)

Filter uninformative genes.

matrix_readcount_norm <- matrix_readcount_use[
    Matrix::rowSums(
        matrix_readcount_use > 0
    ) >= MINIMAL_NUM_CELLS_REQUIRED_FOR_GENE,
]
matrix_readcount_norm <- matrix_readcount_norm[
    Matrix::rowSums(
        matrix_readcount_norm
    ) >= MINIMAL_NUM_COUNTS_REQUIRED_FOR_GENE,
]
dim(matrix_readcount_norm)
## [1] 17173   124

Median normalize matrix.

matrix_readcount_norm@x <- median(colSums(matrix_readcount_norm)) *
    (matrix_readcount_norm@x / rep.int(
        colSums(matrix_readcount_norm),
        diff(matrix_readcount_norm@p)
    ))

Dimensionality reduction

PCA

matrix_readcount_norm_log <- matrix_readcount_norm
matrix_readcount_norm_log@x <- log1p(matrix_readcount_norm_log@x)

# z-score
matrix_readcount_norm_log_scaled <- t(
    scale(
        t(
            matrix_readcount_norm_log
        ),
        center = TRUE, scale = TRUE
    )
)
# features_var <- apply(matrix_readcount_norm_log_scaled, 1, var)
# features_use <- rownames(matrix_readcount_norm_log_scaled)[features_var > 0]

pca_out <- prcomp(
    t(matrix_readcount_norm_log_scaled),
    center = FALSE,
    scale = FALSE
)
summary(pca_out)$imp %>%
    t() %>%
    as.data.frame() %>%
    rownames_to_column(var = "component") %>%
    mutate(
        rank = 1:n()
    ) %>%
    slice(1:30) %>%
    ggplot(
        aes(
            x = rank,
            y = `Proportion of Variance`
        )
    ) +
    geom_point(size = 0.3) +
    theme_bw() +
    scale_x_continuous(
        name = "Component",
        breaks = c(1, seq(5, 30, 5))
    ) +
    scale_y_continuous(
        name = "Proportion of variance",
        labels = scales::percent
    ) +
    theme(
        axis.title = ggplot2::element_text(family = "Arial", size = 6),
        axis.text = ggplot2::element_text(family = "Arial", size = 6),
        panel.grid.minor = ggplot2::element_blank()
    )

file_name <- "Rplot_pca_variance_explained.pdf"
if (!file.exists(file_name)) {
    ggsave(
        filename = file_name,
        useDingbats = FALSE,
        plot = last_plot(),
        device = NULL,
        path = NULL,
        scale = 1,
        width = 55 * 1.5,
        height = 55,
        units = c("mm"),
    )
}
cell_metadata <- pca_out$x %>%
    as.data.frame() %>%
    rownames_to_column(var = "cell") %>%
    select(cell, PC1, PC2, PC3) %>%
    rename(
        x_pca = PC1,
        y_pca = PC2,
        z_pca = PC3
    ) %>%
    left_join(cell_metadata) %>%
    mutate(
        sample = factor(
            sample,
            levels = c(
                "Oocyte",
                "Zygote",
                "2-cell",
                "4-cell",
                "8-cell",
                "Morula",
                "Late blastocyst",
                "hESC passage 0",
                "hESC passage 10"
            )
        )
    )
## Joining, by = "cell"
p_embedding_pca1 <- cell_metadata %>%
    mutate(
        category = "PCA"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_pca,
        y = y_pca,
        color = sample
    ) +
    labs(
        color = NULL,
        x = str_c(
            "PC1",
            "; Proportion of variance: ",
            scales::percent(
                summary(pca_out)$importance["Proportion of Variance", "PC1"],
                accuracy = 0.1
            )
        ),
        y = str_c(
            "PC2",
            "; Proportion of variance: ",
            scales::percent(
                summary(pca_out)$importance["Proportion of Variance", "PC2"],
                accuracy = 0.1
            )
        )
    )


p_embedding_pca2 <- cell_metadata %>%
    mutate(
        category = "PCA"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_pca,
        y = z_pca,
        color = sample
    ) +
    labs(
        color = NULL,
        x = str_c(
            "PC1",
            "; Proportion of variance: ",
            scales::percent(
                summary(pca_out)$importance["Proportion of Variance", "PC1"],
                accuracy = 0.1
            )
        ),
        y = str_c(
            "PC3",
            "; Proportion of variance: ",
            scales::percent(
                summary(pca_out)$importance["Proportion of Variance", "PC3"],
                accuracy = 0.1
            )
        )
    )
p_embedding_pca1 +
    p_embedding_pca2 +
    plot_annotation(theme = theme(plot.margin = margin())) +
    plot_layout(guides = "collect")

file_name <- "Rplot_embedding_pca.pdf"
if (!file.exists(file_name)) {
    ggsave(
        filename = file_name,
        useDingbats = FALSE,
        plot = last_plot(),
        device = NULL,
        path = NULL,
        scale = 1,
        width = 55 * 2.5,
        height = 55,
        units = c("mm"),
    )
}
map(levels(cell_metadata$sample), function(x) {
    plot_embedding(
        embedding = cell_metadata[, c("x_pca", "y_pca")],
        color_values = as.factor(as.integer(cell_metadata$sample == x)),
        label = str_c("PCA; ", x),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = FALSE,
        geom_point_size = 1,
        sort_values = TRUE
    ) +
        scale_color_manual(values = c("grey70", "salmon"))
}) %>%
    purrr::reduce(`+`) +
    plot_layout(ncol = 3) +
    plot_annotation(theme = theme(plot.margin = margin()))
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.
## Scale for 'colour' is already present. Adding another scale for 'colour',
## which will replace the existing scale.

file_name <- "Rplot_embedding_pca_separated.pdf"
if (!file.exists(file_name)) {
    ggsave(
        filename = file_name,
        useDingbats = FALSE,
        plot = last_plot(),
        device = NULL,
        path = NULL,
        scale = 1,
        width = 55 * 3,
        height = 55 * 3,
        units = c("mm"),
    )
}

t-SNE

N_COMPONENTS <- 5

set.seed(seed = SEED_USE)
embedding_rtsne <- Rtsne::Rtsne(
    X = pca_out$x[, 1:N_COMPONENTS],
    perplexity = 30,
    check_duplicates = FALSE,
    pca = FALSE,
    max_iter = 3000,
    verbose = TRUE
)$Y
## Read the 124 x 5 data matrix successfully!
## Using no_dims = 2, perplexity = 30.000000, and theta = 0.500000
## Computing input similarities...
## Building tree...
## Done in 0.01 seconds (sparsity = 0.858091)!
## Learning embedding...
## Iteration 50: error is 43.788643 (50 iterations in 0.01 seconds)
## Iteration 100: error is 39.872788 (50 iterations in 0.01 seconds)
## Iteration 150: error is 40.752301 (50 iterations in 0.01 seconds)
## Iteration 200: error is 42.302276 (50 iterations in 0.01 seconds)
## Iteration 250: error is 42.480010 (50 iterations in 0.01 seconds)
## Iteration 300: error is 0.285685 (50 iterations in 0.01 seconds)
## Iteration 350: error is 0.058823 (50 iterations in 0.01 seconds)
## Iteration 400: error is 0.057152 (50 iterations in 0.01 seconds)
## Iteration 450: error is 0.055805 (50 iterations in 0.01 seconds)
## Iteration 500: error is 0.055987 (50 iterations in 0.01 seconds)
## Iteration 550: error is 0.055963 (50 iterations in 0.01 seconds)
## Iteration 600: error is 0.054248 (50 iterations in 0.01 seconds)
## Iteration 650: error is 0.056248 (50 iterations in 0.01 seconds)
## Iteration 700: error is 0.054997 (50 iterations in 0.01 seconds)
## Iteration 750: error is 0.054937 (50 iterations in 0.01 seconds)
## Iteration 800: error is 0.054303 (50 iterations in 0.01 seconds)
## Iteration 850: error is 0.054776 (50 iterations in 0.01 seconds)
## Iteration 900: error is 0.056342 (50 iterations in 0.01 seconds)
## Iteration 950: error is 0.055659 (50 iterations in 0.01 seconds)
## Iteration 1000: error is 0.056063 (50 iterations in 0.01 seconds)
## Iteration 1050: error is 0.055858 (50 iterations in 0.01 seconds)
## Iteration 1100: error is 0.055642 (50 iterations in 0.01 seconds)
## Iteration 1150: error is 0.055827 (50 iterations in 0.01 seconds)
## Iteration 1200: error is 0.056380 (50 iterations in 0.01 seconds)
## Iteration 1250: error is 0.056466 (50 iterations in 0.01 seconds)
## Iteration 1300: error is 0.056195 (50 iterations in 0.01 seconds)
## Iteration 1350: error is 0.055019 (50 iterations in 0.01 seconds)
## Iteration 1400: error is 0.056039 (50 iterations in 0.01 seconds)
## Iteration 1450: error is 0.055105 (50 iterations in 0.01 seconds)
## Iteration 1500: error is 0.056822 (50 iterations in 0.01 seconds)
## Iteration 1550: error is 0.056254 (50 iterations in 0.01 seconds)
## Iteration 1600: error is 0.054996 (50 iterations in 0.01 seconds)
## Iteration 1650: error is 0.055490 (50 iterations in 0.01 seconds)
## Iteration 1700: error is 0.056493 (50 iterations in 0.01 seconds)
## Iteration 1750: error is 0.056685 (50 iterations in 0.01 seconds)
## Iteration 1800: error is 0.056707 (50 iterations in 0.01 seconds)
## Iteration 1850: error is 0.056842 (50 iterations in 0.01 seconds)
## Iteration 1900: error is 0.055628 (50 iterations in 0.01 seconds)
## Iteration 1950: error is 0.056506 (50 iterations in 0.01 seconds)
## Iteration 2000: error is 0.055666 (50 iterations in 0.01 seconds)
## Iteration 2050: error is 0.055674 (50 iterations in 0.01 seconds)
## Iteration 2100: error is 0.055214 (50 iterations in 0.01 seconds)
## Iteration 2150: error is 0.055411 (50 iterations in 0.01 seconds)
## Iteration 2200: error is 0.055845 (50 iterations in 0.01 seconds)
## Iteration 2250: error is 0.056313 (50 iterations in 0.01 seconds)
## Iteration 2300: error is 0.056424 (50 iterations in 0.01 seconds)
## Iteration 2350: error is 0.056730 (50 iterations in 0.01 seconds)
## Iteration 2400: error is 0.055601 (50 iterations in 0.01 seconds)
## Iteration 2450: error is 0.055887 (50 iterations in 0.01 seconds)
## Iteration 2500: error is 0.055984 (50 iterations in 0.01 seconds)
## Iteration 2550: error is 0.054280 (50 iterations in 0.01 seconds)
## Iteration 2600: error is 0.055425 (50 iterations in 0.01 seconds)
## Iteration 2650: error is 0.055924 (50 iterations in 0.01 seconds)
## Iteration 2700: error is 0.056034 (50 iterations in 0.01 seconds)
## Iteration 2750: error is 0.056217 (50 iterations in 0.01 seconds)
## Iteration 2800: error is 0.055702 (50 iterations in 0.01 seconds)
## Iteration 2850: error is 0.054708 (50 iterations in 0.01 seconds)
## Iteration 2900: error is 0.054788 (50 iterations in 0.01 seconds)
## Iteration 2950: error is 0.054004 (50 iterations in 0.01 seconds)
## Iteration 3000: error is 0.054596 (50 iterations in 0.01 seconds)
## Fitting performed in 0.63 seconds.
cell_metadata <- cbind(
    cell_metadata,
    embedding_rtsne
) %>%
    rename(
        x_tsne = "1",
        y_tsne = "2"
    )
p_embedding_tsne <- cell_metadata %>%
    mutate(
        category = "t-SNE"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_tsne,
        y = y_tsne,
        color = sample
    ) +
    labs(
        x = "Dim 1",
        y = "Dim 2"
    )
p_embedding_pca1 +
    p_embedding_tsne +
    plot_annotation(theme = theme(plot.margin = margin())) +
    plot_layout(guides = "collect")

file_name <- "Rplot_embedding.pdf"
if (!file.exists(file_name)) {
    ggsave(
        filename = file_name,
        useDingbats = FALSE,
        plot = last_plot(),
        device = NULL,
        path = NULL,
        scale = 1,
        width = 55 * 2.5,
        height = 55,
        units = c("mm"),
    )
}

Visualization

Heatmap of marker genes

MARKER_GENES_EPI <- gene_symbo_info %>%
    filter(X2 %in% c(
        "OCT4",
        "SOX2",
        "NANOG",
        "KLF4",
        "PRDM14",
        "FOXD3",
        "GDF3",
        "NR5A2",
        "UTF1",
        "CLDN19",
        "JMJD2B",
        "JMJD1A",
        "IFITM2"
    ))
MARKER_GENES_EPI <- paste(
    MARKER_GENES_EPI$X1,
    MARKER_GENES_EPI$X2,
    sep = "_"
)


MARKER_GENES_PE <- gene_symbo_info %>%
    filter(X2 %in% c(
        "FGFR4",
        "TDGF1",
        "KRT8",
        "KRT19",
        "CLDN3",
        "IFITM1",
        "DPPA5",
        "JMJD4",
        "NODAL"
    ))
MARKER_GENES_PE <- paste(
    MARKER_GENES_PE$X1,
    MARKER_GENES_PE$X2,
    sep = "_"
)


MARKER_GENES_TE <- gene_symbo_info %>%
    filter(X2 %in% c(
        "CDX2",
        "GATA2",
        "GATA3",
        "KLF5",
        "KRT18",
        "CLDN10",
        "CLDN4",
        "CD46",
        "CD164",
        "ATP1A1",
        "ATP1B3",
        "TET2"
    ))
MARKER_GENES_TE <- paste(
    MARKER_GENES_TE$X1,
    MARKER_GENES_TE$X2,
    sep = "_"
)


FEATURES_HEATMAP <- c(
    MARKER_GENES_EPI,
    MARKER_GENES_PE,
    MARKER_GENES_TE
)
matrix_heatmap <- calc_cpm(m = matrix_readcount_use)[FEATURES_HEATMAP, ]
matrix_heatmap <- log10(matrix_heatmap + 1)
matrix_heatmap <- t(scale(t(matrix_heatmap)))
rownames(matrix_heatmap) <- str_remove(
    string = rownames(matrix_heatmap),
    pattern = "^E.+_"
)


(heatmap_limits <- quantile(matrix_heatmap, c(0.05, 0.95)))
##        5%       95% 
## -1.443770  1.484512
matrix_heatmap[matrix_heatmap < heatmap_limits[1]] <- heatmap_limits[1]
matrix_heatmap[matrix_heatmap > heatmap_limits[2]] <- heatmap_limits[2]


ha_columns <- ComplexHeatmap::HeatmapAnnotation(
    sample = cell_metadata$sample,
    #
    col = list(sample = setNames(
        object = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(cell_metadata$sample))
        ),
        nm = levels(cell_metadata$sample)
    )),
    #
    annotation_legend_param = list(
        title = "Sample",
        title_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 6
        ),
        legend_direction = "vertical",
        labels_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 6
        )
    ),
    #
    show_annotation_name = TRUE,
    annotation_label = c("Sample"),
    annotation_name_gp = grid::gpar(fontfamily = "Arial", fontsize = 6),
    annotation_name_side = "left"
)
ComplexHeatmap::Heatmap(
    matrix = matrix_heatmap,
    col = wesanderson::wes_palette("Zissou1", 100, type = "continuous"),
    # rect_gp = grid::gpar(col = "white", lwd = 0.1),
    #
    cluster_columns = TRUE,
    show_column_names = FALSE,
    row_names_gp = grid::gpar(fontfamily = "Arial", fontsize = 6),
    # column_names_gp = grid::gpar(fontfamily = "Arial", fontsize = 6),
    #
    top_annotation = ha_columns,
    show_heatmap_legend = TRUE,
    #
    heatmap_legend_param = list(
        title = "Z score",
        title_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 6
        ),
        legend_direction = "vertical",
        labels_gp = grid::gpar(
            fontfamily = "Arial",
            fontsize = 6
        ),
        legend_height = unit(25, "mm"),
        legend_width = unit(10, "mm")
    )
    # heatmap_width = unit(8, "cm")
    # heatmap_height = unit(8, "cm")
)

Hierarchical clustering

matrix_pvclust <- matrix_readcount_norm_log
stopifnot(colnames(matrix_pvclust) == cell_metadata$cell)
colnames(matrix_pvclust) <- paste(
    colnames(matrix_pvclust),
    str_replace_all(string = cell_metadata$sample, pattern = " ", replacement = "_"),
    sep = ";"
)

library(pvclust)
pvclust_out <- pvclust(
    as.matrix(matrix_pvclust),
    nboot = 100,
    parallel = TRUE
)
## Creating a temporary cluster...done:
## socket cluster with 7 nodes on host 'localhost'
## Multiscale bootstrap... Done.
plot(pvclust_out, cex = 0.8)
pvrect(pvclust_out, alpha = 0.9)

R session info

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 4.0.2 (2020-06-22)
##  os       macOS Catalina 10.15.6      
##  system   x86_64, darwin19.5.0        
##  ui       unknown                     
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Chicago             
##  date     2020-07-29                  
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package        * version     date       lib
##  abind            1.4-5       2016-07-21 [1]
##  ape              5.4         2020-06-03 [1]
##  assertthat       0.2.1       2019-03-21 [1]
##  backports        1.1.8       2020-06-17 [1]
##  blob             1.2.1       2020-01-20 [1]
##  broom            0.7.0.9001  2020-07-28 [1]
##  callr            3.4.3       2020-03-28 [1]
##  cellranger       1.1.0       2016-07-27 [1]
##  circlize         0.4.10      2020-06-15 [1]
##  cli              2.0.2       2020-02-28 [1]
##  clue             0.3-57      2019-02-25 [1]
##  cluster          2.1.0       2019-06-19 [2]
##  codetools        0.2-16      2018-12-24 [2]
##  colorspace       1.4-1       2019-03-18 [1]
##  ComplexHeatmap   2.4.3       2020-07-25 [1]
##  cowplot          1.0.0       2019-07-11 [1]
##  crayon           1.3.4       2017-09-16 [1]
##  data.table       1.13.0      2020-07-24 [1]
##  DBI              1.1.0       2019-12-15 [1]
##  dbplyr           1.4.4.9000  2020-07-28 [1]
##  deldir           0.1-28      2020-07-15 [1]
##  desc             1.2.0       2018-05-01 [1]
##  devtools         2.3.1.9000  2020-07-29 [1]
##  digest           0.6.25      2020-02-23 [1]
##  dplyr          * 1.0.1       2020-07-28 [1]
##  ellipsis         0.3.1.9000  2020-07-18 [1]
##  evaluate         0.14        2019-05-28 [1]
##  extrafont      * 0.17        2014-12-08 [1]
##  extrafontdb      1.0         2012-06-11 [1]
##  fansi            0.4.1       2020-01-08 [1]
##  farver           2.0.3       2020-01-16 [1]
##  fastmap          1.0.1       2019-10-08 [1]
##  fitdistrplus     1.1-1       2020-05-19 [1]
##  forcats        * 0.5.0.9000  2020-05-28 [1]
##  fs               1.4.2.9000  2020-07-29 [1]
##  future           1.18.0      2020-07-09 [1]
##  future.apply     1.6.0       2020-07-01 [1]
##  generics         0.0.2       2018-11-29 [1]
##  GetoptLong       1.0.2       2020-07-06 [1]
##  ggplot2        * 3.3.2.9000  2020-07-29 [1]
##  ggrepel          0.9.0       2020-07-24 [1]
##  ggridges         0.5.2       2020-01-12 [1]
##  ggthemes         4.2.0       2019-05-13 [1]
##  GlobalOptions    0.1.2       2020-06-10 [1]
##  globals          0.12.5      2019-12-07 [1]
##  glue             1.4.1.9000  2020-07-07 [1]
##  goftest          1.2-2       2019-12-02 [1]
##  gridExtra        2.3         2017-09-09 [1]
##  gtable           0.3.0       2019-03-25 [1]
##  haven            2.3.1       2020-06-01 [1]
##  hms              0.5.3       2020-01-08 [1]
##  htmltools        0.5.0       2020-06-16 [1]
##  htmlwidgets      1.5.1       2019-10-08 [1]
##  httpuv           1.5.4       2020-06-06 [1]
##  httr             1.4.2       2020-07-20 [1]
##  ica              1.0-2       2018-05-24 [1]
##  igraph           1.2.5       2020-03-19 [1]
##  irlba            2.3.3       2019-02-05 [1]
##  jsonlite         1.7.0       2020-06-25 [1]
##  KernSmooth       2.23-17     2020-04-26 [2]
##  knitr            1.29        2020-06-23 [1]
##  labeling         0.3         2014-08-23 [1]
##  later            1.1.0.1     2020-06-05 [1]
##  lattice          0.20-41     2020-04-02 [2]
##  lazyeval         0.2.2       2019-03-15 [1]
##  leiden           0.3.3       2020-02-04 [1]
##  lifecycle        0.2.0       2020-03-06 [1]
##  listenv          0.8.0       2019-12-05 [1]
##  lmtest           0.9-37      2019-04-30 [1]
##  lubridate        1.7.9       2020-07-11 [1]
##  magrittr       * 1.5.0.9000  2020-07-27 [1]
##  MASS             7.3-51.6    2020-04-26 [2]
##  Matrix         * 1.2-18      2019-11-27 [1]
##  memoise          1.1.0       2017-04-21 [1]
##  mgcv             1.8-31      2019-11-09 [2]
##  mime             0.9         2020-02-04 [1]
##  miniUI           0.1.1.1     2018-05-18 [1]
##  modelr           0.1.8.9000  2020-05-19 [1]
##  munsell          0.5.0       2018-06-12 [1]
##  nlme             3.1-148     2020-05-24 [2]
##  patchwork      * 1.0.1.9000  2020-06-22 [1]
##  pbapply          1.4-2       2019-08-31 [1]
##  pillar           1.4.6.9000  2020-07-21 [1]
##  pkgbuild         1.1.0.9000  2020-07-14 [1]
##  pkgconfig        2.0.3       2019-09-22 [1]
##  pkgload          1.1.0       2020-05-29 [1]
##  plotly           4.9.2.1     2020-04-04 [1]
##  plyr             1.8.6       2020-03-03 [1]
##  png              0.1-7       2013-12-03 [1]
##  polyclip         1.10-0      2019-03-14 [1]
##  prettyunits      1.1.1       2020-01-24 [1]
##  processx         3.4.3       2020-07-05 [1]
##  promises         1.1.1       2020-06-09 [1]
##  ps               1.3.3       2020-05-08 [1]
##  purrr          * 0.3.4.9000  2020-07-29 [1]
##  R6               2.4.1.9000  2020-07-18 [1]
##  RANN             2.6.1       2019-01-08 [1]
##  RColorBrewer     1.1-2       2014-12-07 [1]
##  Rcpp             1.0.5       2020-07-06 [1]
##  RcppAnnoy        0.0.16      2020-03-08 [1]
##  readr          * 1.3.1.9000  2020-07-16 [1]
##  readxl           1.3.1.9000  2020-05-28 [1]
##  remotes          2.2.0.9000  2020-07-23 [1]
##  reprex           0.3.0       2019-05-16 [1]
##  reshape2         1.4.4       2020-04-09 [1]
##  reticulate       1.16        2020-05-27 [1]
##  rjson            0.2.20      2018-06-08 [1]
##  rlang          * 0.4.7.9000  2020-07-29 [1]
##  rmarkdown        2.3.3       2020-07-25 [1]
##  ROCR             1.0-11      2020-05-02 [1]
##  rpart            4.1-15      2019-04-12 [2]
##  rprojroot        1.3-2       2018-01-03 [1]
##  rstudioapi       0.11.0-9000 2020-07-15 [1]
##  rsvd             1.0.3       2020-02-17 [1]
##  Rtsne            0.16        2020-07-03 [1]
##  Rttf2pt1         1.3.8       2020-01-10 [1]
##  rvest            0.3.6       2020-07-25 [1]
##  scales           1.1.1.9000  2020-07-24 [1]
##  sctransform      0.2.1       2019-12-17 [1]
##  sessioninfo      1.1.1.9000  2020-07-18 [1]
##  Seurat         * 3.2.0.9004  2020-07-28 [1]
##  shape            1.4.4       2018-02-07 [1]
##  shiny            1.5.0.9001  2020-07-28 [1]
##  spatstat         1.64-1      2020-05-12 [1]
##  spatstat.data    1.4-3       2020-01-26 [1]
##  spatstat.utils   1.17-0      2020-02-07 [1]
##  stringi          1.4.6       2020-02-17 [1]
##  stringr        * 1.4.0.9000  2020-06-01 [1]
##  styler         * 1.3.2.9000  2020-07-25 [1]
##  survival         3.2-3       2020-06-13 [2]
##  tensor           1.5         2012-05-05 [1]
##  testthat         2.99.0.9000 2020-07-28 [1]
##  tibble         * 3.0.3.9000  2020-07-21 [1]
##  tidyr          * 1.1.0.9000  2020-07-23 [1]
##  tidyselect       1.1.0.9000  2020-07-11 [1]
##  tidyverse      * 1.3.0.9000  2020-06-01 [1]
##  usethis          1.6.1.9001  2020-07-29 [1]
##  uwot             0.1.8.9000  2020-07-19 [1]
##  vctrs            0.3.2.9000  2020-07-23 [1]
##  viridisLite      0.3.0       2018-02-01 [1]
##  wesanderson      0.3.6.9000  2020-06-05 [1]
##  withr            2.2.0       2020-04-20 [1]
##  xfun             0.16        2020-07-24 [1]
##  xml2             1.3.2       2020-04-23 [1]
##  xtable           1.8-4       2019-04-21 [1]
##  yaml             2.2.1       2020-02-01 [1]
##  zoo              1.8-8       2020-05-02 [1]
##  source                               
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  Github (tidymodels/broom@762e3ad)    
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Bioconductor                         
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/dbplyr@a6ed629)    
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (r-lib/devtools@8d14704)      
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/dplyr@48aead4)     
##  Github (r-lib/ellipsis@57a5071)      
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/forcats@ab81d1b)   
##  Github (r-lib/fs@9e143f9)            
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (tidyverse/ggplot2@b4bc293)   
##  Github (slowkow/ggrepel@4d0ef50)     
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/glue@205f18b)      
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.1)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (tidyverse/lubridate@de2ee09) 
##  Github (tidyverse/magrittr@0d14075)  
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/modelr@16168e0)    
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (thomasp85/patchwork@82a5e03) 
##  CRAN (R 4.0.0)                       
##  Github (r-lib/pillar@8aef8f2)        
##  Github (r-lib/pkgbuild@3a87bd9)      
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/purrr@74d5d67)     
##  Github (r-lib/R6@1415d11)            
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/readr@2ab51b2)     
##  Github (tidyverse/readxl@3815961)    
##  Github (r-lib/remotes@d7fe461)       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (r-lib/rlang@1fb41d7)         
##  Github (rstudio/rmarkdown@204aa41)   
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (rstudio/rstudioapi@ed5dd25)  
##  CRAN (R 4.0.0)                       
##  Github (jkrijthe/Rtsne@14b195f)      
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  Github (r-lib/scales@9ff4757)        
##  CRAN (R 4.0.0)                       
##  Github (r-lib/sessioninfo@791705b)   
##  Github (satijalab/seurat@ad0008e)    
##  CRAN (R 4.0.0)                       
##  Github (rstudio/shiny@766b910)       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  Github (tidyverse/stringr@f70c4ba)   
##  Github (r-lib/styler@16d815e)        
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.2)                       
##  Github (r-lib/testthat@0af11cd)      
##  Github (tidyverse/tibble@b4eec19)    
##  Github (tidyverse/tidyr@3f49600)     
##  Github (tidyverse/tidyselect@69fdc96)
##  Github (hadley/tidyverse@8a0bb99)    
##  Github (r-lib/usethis@dbe57c0)       
##  Github (jlmelville/uwot@13a198f)     
##  Github (r-lib/vctrs@df8a659)         
##  CRAN (R 4.0.0)                       
##  Github (karthik/wesanderson@d90700a) 
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.2)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
##  CRAN (R 4.0.0)                       
## 
## [1] /usr/local/lib/R/4.0/site-library
## [2] /usr/local/Cellar/r/4.0.2_1/lib/R/library