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"
SEED_USE <- 20200616
MINIMAL_NUM_CELLS_REQUIRED_FOR_GENE <- 30
MINIMAL_NUM_COUNTS_REQUIRED_FOR_GENE <- 60
source(
file = file.path(
SCRIPT_DIR,
"utilities.R"
)
)
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 .
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)
))
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"),
)
}
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"),
)
}
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")
)
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)
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