Petropoulos, S., Edsgärd, D., Reinius, B., Deng, Q., Panula, S.P., Codeluppi, S., Plaza Reyes, A., Linnarsson, S., Sandberg, R., and Lanner, F. (2016). Single-Cell RNA-Seq Reveals Lineage and X Chromosome Dynamics in Human Preimplantation Embryos. Cell 165, 1012–1026.
Load required packages.
library(tidyverse)
library(magrittr)
library(Matrix)
library(Seurat)
library(extrafont)
library(patchwork)
# library(tidylog)
Sys.time()
## [1] "2020-08-03 17:22:12 CDT"
source(
file = file.path(
SCRIPT_DIR,
"utilities.R"
)
)
embedding <- read_csv(
file = "embedding_ncomponents9_seed20200317.csv"
) %>%
select(cell:y_tsne, x_phate, y_phate)
## Parsed with column specification:
## cols(
## cell = col_character(),
## batch = col_character(),
## louvain = col_double(),
## x_tsne = col_double(),
## y_tsne = col_double(),
## x_umap = col_double(),
## y_umap = col_double(),
## x_fitsne = col_double(),
## y_fitsne = col_double(),
## x_phate = col_double(),
## y_phate = col_double()
## )
embedding %>% head()
reticulate::py_discover_config()
## python: /Users/jialei/.pyenv/shims/python
## libpython: /Users/jialei/.pyenv/versions/3.8.2/lib/libpython3.8.dylib
## pythonhome: /Users/jialei/.pyenv/versions/3.8.2:/Users/jialei/.pyenv/versions/3.8.2
## version: 3.8.2 (default, May 23 2020, 03:35:41) [Clang 11.0.3 (clang-1103.0.32.62)]
## numpy: /Users/jialei/.pyenv/versions/3.8.2/lib/python3.8/site-packages/numpy
## numpy_version: 1.19.0
##
## NOTE: Python version was forced by RETICULATE_PYTHON
np <- reticulate::import("numpy", convert = TRUE)
scipy.sparse <- reticulate::import(module = "scipy.sparse", convert = TRUE)
matrix_readcount_use <- scipy.sparse$load_npz("../matrix_readcount.npz")
matrix_readcount_use_features <- np$load("../matrix_readcount_features.npy")
matrix_readcount_use_barcodes <- np$load("../matrix_readcount_barcodes.npy")
colnames(matrix_readcount_use) <- matrix_readcount_use_barcodes
# rownames(matrix_readcount_use) <- matrix_readcount_use_features
rownames(matrix_readcount_use) <- paste(
gene_symbo_info$X1,
gene_symbo_info$X2,
sep = "_"
)
matrix_readcount_use <- matrix_readcount_use[, embedding$cell]
# calculate CPM
matrix_cpm_use <- calc_cpm(matrix_readcount_use)
stopifnot(
dim(matrix_readcount_use) == dim(matrix_cpm_use)
)
print(dim(matrix_readcount_use))
## [1] 33538 1529
walk(list(embedding, matrix_readcount_use, matrix_cpm_use), function(x) {
print(object.size(x), units = "auto", standard = "SI")
})
## 282.9 kB
## 190.6 MB
## 190.6 MB
Add metadata.
embedding %<>%
left_join(
x = read_delim("../E-MTAB-3929.sdrf.txt", delim = "\t") %>%
select(
"Comment[ENA_RUN]",
"Characteristics[individual]",
"Characteristics[inferred lineage]"
) %>%
rename(
cell = `Comment[ENA_RUN]`,
embryo = `Characteristics[individual]`,
lineage = `Characteristics[inferred lineage]`
)
)
## Warning: Duplicated column names deduplicated: 'Protocol REF' => 'Protocol
## REF_1' [17], 'Protocol REF' => 'Protocol REF_2' [24], 'Performer' =>
## 'Performer_1' [25], 'Protocol REF' => 'Protocol REF_3' [33], 'Protocol REF'
## => 'Protocol REF_4' [36], 'Derived Array Data File' => 'Derived Array Data
## File_1' [37], 'Comment [Derived ArrayExpress FTP file]' => 'Comment [Derived
## ArrayExpress FTP file]_1' [38], 'Protocol REF' => 'Protocol REF_5' [39],
## 'Derived Array Data File' => 'Derived Array Data File_2' [40], 'Comment [Derived
## ArrayExpress FTP file]' => 'Comment [Derived ArrayExpress FTP file]_2' [41],
## 'Protocol REF' => 'Protocol REF_6' [42], 'Derived Array Data File' => 'Derived
## Array Data File_3' [43], 'Comment [Derived ArrayExpress FTP file]' => 'Comment
## [Derived ArrayExpress FTP file]_3' [44]
## Parsed with column specification:
## cols(
## .default = col_character(),
## `Characteristics[cell]` = col_double(),
## `Characteristics[inferred pseudo-time]` = col_double(),
## `Factor Value[cell]` = col_double()
## )
## See spec(...) for full column specifications.
## Joining, by = "cell"
embedding %>% head()
# clean up
embedding %>%
pull(embryo) %>%
table()
## .
## E3.1 E3.2 E3.3 E3.4 E3.45 E3.46
## 5 8 5 3 8 7
## E3.47 E3.48 E3.49 E3.50 E3.51 E3.52
## 7 7 8 6 6 7
## E3.53 E4.1 E4.10 E4.11 E4.2 E4.24_5_0_4
## 4 5 11 1 2 9
## E4.3 E4.31_5_1 E4.4 E4.5 E4.6 E4.7
## 16 9 18 16 7 8
## E4.8 E4.9 E4.late.33 E4.late.34 E4.late.35 E5.1
## 21 19 11 22 15 5
## E5.10 E5.11 E5.12 E5.13 E5.14 E5.15
## 18 14 13 31 30 24
## E5.16 E5.2 E5.3 E5.37 E5.38 E5.39
## 29 9 12 13 2 7
## E5.40 E5.41 E5.42 E5.43 E5.5 E5.6
## 26 19 10 19 11 14
## E5.7 E5.8 E5.9 E5.early.31 E5.early.36 E6.1
## 32 7 8 10 14 16
## E6.10 E6.11 E6.12 E6.13 E6.14 E6.15
## 16 7 35 39 31 38
## E6.16 E6.17 E6.18 E6.2 E6.22 E6.3
## 12 46 23 11 22 6
## E6.4 E6.6 E6.7 E6.8 E6.9 E7.10
## 6 21 8 60 18 16
## E7.11 E7.12 E7.13 E7.14 E7.15 E7.16
## 23 21 12 22 21 64
## E7.17 E7.19 E7.2 E7.3 E7.4 E7.5
## 50 22 27 22 38 10
## E7.6 E7.7 E7.8 E7.9
## 27 21 31 39
embedding %<>%
mutate(
developmental_stage = str_remove(
string = embryo,
pattern = "\\.[0-9_]+"
) %>%
str_replace(
pattern = "\\.",
replacement = "_"
),
developmental_stage = factor(
developmental_stage,
levels = c(
"E3",
"E4",
"E4_late",
"E5_early",
"E5",
"E6",
"E7"
)
),
#
developmental_stage2 = str_remove(
string = developmental_stage,
pattern = "_.+$"
),
developmental_stage2 = factor(
developmental_stage2,
levels = str_sort(unique(developmental_stage2), numeric = TRUE)
),
#
lineage = factor(
lineage,
levels = c(
"epiblast",
"primitive endoderm",
"trophectoderm",
"not applicable"
)
),
)
Summarize sequencing depth.
embedding %>%
mutate(
num_umis = colSums(matrix_readcount_use[, cell]),
num_genes = colSums(matrix_readcount_use[, cell] > 0)
) %>%
group_by(louvain) %>%
summarise(
num_cell = n(),
median_umis = median(num_umis),
median_genes = median(num_genes)
) %>%
gt::gt() %>%
gt::tab_options(table.font.size = "median")
## `summarise()` ungrouping output (override with `.groups` argument)
louvain | num_cell | median_umis | median_genes |
---|---|---|---|
0 | 294 | 2045877 | 11683.0 |
1 | 225 | 1811303 | 11251.0 |
2 | 199 | 1181313 | 9059.0 |
3 | 169 | 1346687 | 10379.0 |
4 | 152 | 1644427 | 9974.5 |
5 | 149 | 585284 | 6763.0 |
6 | 137 | 1889933 | 10987.0 |
7 | 120 | 1334711 | 9616.0 |
8 | 84 | 1570985 | 10117.5 |
Summarize development stage info.
embedding %>%
dplyr::count(developmental_stage) %>%
gt::gt() %>%
gt::cols_label(n = "num_cell") %>%
gt::tab_options(table.font.size = "median")
developmental_stage | num_cell |
---|---|
E3 | 81 |
E4 | 142 |
E4_late | 48 |
E5_early | 24 |
E5 | 353 |
E6 | 415 |
E7 | 466 |
Summarize lineage info.
embedding %>%
dplyr::count(lineage) %>%
gt::gt() %>%
gt::cols_label(n = "num_cell") %>%
gt::tab_options(table.font.size = "median")
lineage | num_cell |
---|---|
epiblast | 127 |
primitive endoderm | 108 |
trophectoderm | 861 |
not applicable | 433 |
p_embedding_cluster <- plot_embedding(
embedding = embedding[, c("x_tsne", "y_tsne")],
color_values = embedding$louvain %>% as.factor(),
label = "t-SNE; Cluster",
# label_position = c(label_x, label_y),
show_color_value_labels = TRUE,
show_color_legend = FALSE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = gg_color_hue(n = length(unique(embedding$louvain)))
)
p_embedding_developmental_stage <- plot_embedding(
embedding = embedding[, c("x_tsne", "y_tsne")],
color_values = embedding$developmental_stage,
label = "t-SNE; Developmental stage",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = TRUE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = ggthemes::tableau_color_pal("Tableau 20")(
length(levels(embedding$developmental_stage))
)
) +
labs(color = NULL) +
guides(colour = guide_legend(override.aes = list(size = 3))) +
customized_theme()
p_embedding_lineage <- plot_embedding(
embedding = embedding[, c("x_tsne", "y_tsne")],
color_values = embedding$lineage,
label = "t-SNE; Lineage",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = TRUE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = ggthemes::tableau_color_pal("Tableau 10")(
length(levels(embedding$lineage))
)
) +
labs(color = NULL) +
guides(colour = guide_legend(override.aes = list(size = 3))) +
customized_theme()
p_embedding_cluster_phate <- plot_embedding(
embedding = embedding[, c("x_phate", "y_phate")],
color_values = embedding$louvain %>% as.factor(),
label = "PHATE; Cluster",
# label_position = c(label_x, label_y),
show_color_value_labels = TRUE,
show_color_legend = FALSE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = gg_color_hue(n = length(unique(embedding$louvain)))
)
p_embedding_developmental_stage_phate <- plot_embedding(
embedding = embedding[, c("x_phate", "y_phate")],
color_values = embedding$developmental_stage,
label = "PHATE; Developmental stage",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = TRUE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = ggthemes::tableau_color_pal("Tableau 20")(
length(levels(embedding$developmental_stage))
)
) +
labs(color = NULL) +
guides(colour = guide_legend(override.aes = list(size = 3))) +
customized_theme(x = 0.35)
p_embedding_lineage_phate <- plot_embedding(
embedding = embedding[, c("x_phate", "y_phate")],
color_values = embedding$lineage,
label = "PHATE; Lineage",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = TRUE,
geom_point_size = 1,
sort_values = FALSE
) +
scale_color_manual(
values = ggthemes::tableau_color_pal("Tableau 10")(
length(levels(embedding$lineage))
)
) +
labs(color = NULL) +
guides(colour = guide_legend(override.aes = list(size = 3))) +
customized_theme(x = 0.35)
list(
p_embedding_cluster,
p_embedding_developmental_stage,
p_embedding_lineage,
p_embedding_cluster_phate,
p_embedding_developmental_stage_phate,
p_embedding_lineage_phate
) %>%
purrr::reduce(`+`) +
plot_layout(nrow = 2, byrow = TRUE) +
plot_annotation(theme = theme(plot.margin = margin()))
FEATURES_SELECTED <- c(
"ENSG00000204531_POU5F1",
"ENSG00000181449_SOX2",
"ENSG00000111704_NANOG",
"ENSG00000134853_PDGFRA",
"ENSG00000136574_GATA4",
"ENSG00000125798_FOXA2",
"ENSG00000179348_GATA2",
"ENSG00000107485_GATA3",
"ENSG00000153071_DAB2"
# "ENSG00000087510_TFAP2C",
)
map(FEATURES_SELECTED, function(x) {
plot_embedding_value(
embedding = embedding[, c("x_tsne", "y_tsne")],
color_values = matrix_cpm_use[x, embedding$cell],
colorbar_position = c(0.15, 0.95),
label = str_c("t-SNE; ", x),
label_position = NULL,
# label_position = c(label_x, label_y),
geom_point_size = 1,
sort_values = TRUE,
FUN = NULL
)
}) %>%
purrr::reduce(`+`) +
plot_layout(ncol = 3, byrow = TRUE) +
plot_annotation(theme = theme(plot.margin = margin()))
map(FEATURES_SELECTED, function(x) {
plot_embedding_value(
embedding = embedding[, c("x_phate", "y_phate")],
color_values = matrix_cpm_use[x, embedding$cell],
colorbar_position = c(0.3, 0.95),
label = str_c("PHATE; ", x),
label_position = NULL,
# label_position = c(label_x, label_y),
geom_point_size = 1,
sort_values = TRUE,
FUN = NULL
)
}) %>%
purrr::reduce(`+`) +
plot_layout(ncol = 3, byrow = TRUE) +
plot_annotation(theme = theme(plot.margin = margin()))
Numbers of genes on sex chromosomes.
map_int(list("X" = "X", "Y" = "Y"), function(x) {
genePred %>%
filter(X1 == x) %>%
pull(X5) %>%
length()
})
## X Y
## 1078 100
features_y <- genePred %>%
filter(X1 == "Y") %>%
pull(X5)
features_y <- gene_symbo_info[match(features_y, gene_symbo_info$X1), ]
features_y <- paste(features_y$X1, features_y$X2, sep = "_")
features_x <- genePred %>%
filter(X1 == "X") %>%
pull(X5)
features_x <- gene_symbo_info[match(features_x, gene_symbo_info$X1), ]
features_x <- paste(features_x$X1, features_x$X2, sep = "_")
features_1_22 <- genePred %>%
filter(X1 %in% 1:22) %>%
pull(X5)
features_1_22 <- gene_symbo_info[match(features_1_22, gene_symbo_info$X1), ]
features_1_22 <- paste(features_1_22$X1, features_1_22$X2, sep = "_")
Y_EXPR_SUM_THRESHOLD <- 100
map2(list(features_x, features_y), list("X", "Y"), function(x, y) {
matrix_cpm_use[x, ] %>%
colSums() %>%
enframe(
name = "rank",
value = "expr"
) %>%
mutate(
developmental_stage = embedding[
match(rank, embedding$cell),
"developmental_stage",
drop = TRUE
]
) %>%
plot_hist(
x = expr,
z = developmental_stage,
binwidth = length(x)
) +
labs(x = str_c("CPM sum of ", y, " genes", " (", length(x), ")"))
}) %>% purrr::reduce(`+`) +
plot_layout(
nrow = 1,
byrow = TRUE,
guides = "collect"
) + geom_vline(
xintercept = Y_EXPR_SUM_THRESHOLD,
color = "blue",
linetype = "dashed",
size = 0.3
) +
plot_annotation(theme = theme(plot.margin = margin()))
Assign sex for single cells based on whole embryos.
embedding %<>%
mutate(
y_expr = matrix_cpm_use[features_y, embedding$cell] %>%
colSums(),
sex = ifelse(y_expr >= Y_EXPR_SUM_THRESHOLD, "male", "female")
)
embedding %>% head()
embryo_sex <- sapply(
sort(unique(embedding$embryo)),
function(x) {
# cat(x, "\n")
summarized_count <- embedding %>%
filter(
embryo == x
) %>%
pull(sex) %>%
table() %>%
unlist()
c(
"male" = summarized_count["male"] %>% unname(),
"female" = summarized_count["female"]
) %>% unname()
}
) %>%
t() %>%
replace_na(replace = 0) %>%
as.data.frame() %>%
rename(
male = V1,
female = V2
)
embryo_sex %>%
rownames_to_column(var = "embryo")
Embryos with sex undetermined.
embryos_included <- rownames(embryo_sex)[rowSums(embryo_sex > 0) == 1]
embryo_sex[!rownames(embryo_sex) %in% embryos_included, ] %>%
rownames_to_column(var = "embryo")
embedding %<>%
mutate(
sex_embryo = case_when(
embryo %in% embryos_included & y_expr >= Y_EXPR_SUM_THRESHOLD ~ "male",
embryo %in% embryos_included & y_expr < Y_EXPR_SUM_THRESHOLD ~ "female",
!embryo %in% embryos_included ~ "N/A",
),
sex_embryo = factor(
sex_embryo,
levels = c("male", "female", "N/A")
)
)
embedding
Summarize sex of single cells.
embedding %>%
count(sex_embryo) %>%
gt::gt() %>%
gt::cols_label(
sex_embryo = "sex",
n = "num_cell"
) %>%
gt::tab_options(table.font.size = "median")
sex | num_cell |
---|---|
male | 656 |
female | 703 |
N/A | 170 |
p_embedding_sex <- plot_embedding(
embedding = embedding[, c("x_tsne", "y_tsne")],
color_values = embedding$sex_embryo,
label = "t-SNE; Sex",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = FALSE,
geom_point_size = 1,
sort_values = FALSE
) +
customized_theme() +
scale_color_manual(
name = NULL,
values = c("darkgreen", "salmon", "grey70")
) +
guides(colour = guide_legend(override.aes = list(size = 3)))
p_embedding_sex_phate <- plot_embedding(
embedding = embedding[, c("x_phate", "y_phate")],
color_values = embedding$sex_embryo,
label = "PHATE; Sex",
# label_position = c(label_x, label_y),
show_color_value_labels = FALSE,
show_color_legend = FALSE,
geom_point_size = 1,
sort_values = FALSE
) +
customized_theme() +
scale_color_manual(
name = NULL, values = c("darkgreen", "salmon", "grey70")
) +
guides(colour = guide_legend(override.aes = list(size = 3)))
p_embedding_sex + p_embedding_sex_phate +
plot_layout(ncol = 2, byrow = TRUE, guides = "collect") +
plot_annotation(theme = theme(plot.margin = margin()))
embedding %>%
filter(sex_embryo == "male") %>%
group_by(developmental_stage) %>%
summarise(num_cells = n()) %>%
gt::gt() %>%
gt::tab_options(table.font.size = "median")
## `summarise()` ungrouping output (override with `.groups` argument)
developmental_stage | num_cells |
---|---|
E3 | 35 |
E4 | 83 |
E4_late | 15 |
E5 | 206 |
E6 | 141 |
E7 | 176 |
map(list(features_y, features_1_22), function(x) {
embedding %>%
filter(sex_embryo == "male") %>%
pull(cell) %>%
matrix_cpm_use[x, .] %>%
colSums() %>%
enframe()
}) %>%
bind_cols() %>%
select(c(1, 2, 4)) %>%
`colnames<-`(c("cell", "value1", "value2")) %>%
mutate(norm_value = value1 / value2) %>%
left_join(embedding %>% select(cell, developmental_stage)) %>%
plot_violin(x = developmental_stage, y = norm_value) +
scale_x_discrete(name = "Developmental stage, male") +
scale_y_continuous(name = "Sum of\nnormalized expression of Y")
embedding %>%
filter(sex_embryo == "female") %>%
group_by(developmental_stage) %>%
summarise(num_cells = n()) %>%
gt::gt() %>%
gt::tab_options(table.font.size = "median")
## `summarise()` ungrouping output (override with `.groups` argument)
developmental_stage | num_cells |
---|---|
E3 | 33 |
E4 | 40 |
E4_late | 33 |
E5_early | 24 |
E5 | 133 |
E6 | 200 |
E7 | 240 |
map(list(features_x, features_1_22), function(x) {
embedding %>%
filter(sex_embryo == "female") %>%
pull(cell) %>%
matrix_cpm_use[x, .] %>%
colSums() %>%
enframe()
}) %>%
bind_cols() %>%
select(c(1, 2, 4)) %>%
`colnames<-`(c("cell", "value1", "value2")) %>%
mutate(norm_value = value1 / value2) %>%
left_join(embedding %>% select(cell, developmental_stage)) %>%
plot_violin(x = developmental_stage, y = norm_value) +
scale_x_discrete(name = "Developmental stage, female") +
scale_y_continuous(name = "Sum of\nnormalized expression of X")
devtools::session_info()$platform
## 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-08-03
devtools::session_info()$pack %>%
as_tibble() %>%
select(
package,
loadedversion,
date,
`source`
) %>%
print(n = nrow(.))
## # A tibble: 142 x 4
## package loadedversion date source
## <chr> <chr> <chr> <chr>
## 1 abind 1.4-5 2016-07-21 CRAN (R 4.0.0)
## 2 ape 5.4 2020-06-03 CRAN (R 4.0.2)
## 3 assertthat 0.2.1 2019-03-21 CRAN (R 4.0.0)
## 4 backports 1.1.8 2020-06-17 CRAN (R 4.0.1)
## 5 blob 1.2.1 2020-01-20 CRAN (R 4.0.0)
## 6 broom 0.7.0.9001 2020-07-28 Github (tidymodels/broom@762e3ad)
## 7 callr 3.4.3.9000 2020-07-31 Github (r-lib/callr@b96da8f)
## 8 cellranger 1.1.0 2016-07-27 CRAN (R 4.0.0)
## 9 checkmate 2.0.0 2020-02-06 CRAN (R 4.0.0)
## 10 cli 2.0.2 2020-02-28 CRAN (R 4.0.0)
## 11 cluster 2.1.0 2019-06-19 CRAN (R 4.0.2)
## 12 codetools 0.2-16 2018-12-24 CRAN (R 4.0.2)
## 13 colorspace 1.4-1 2019-03-18 CRAN (R 4.0.0)
## 14 cowplot 1.0.0 2019-07-11 CRAN (R 4.0.0)
## 15 crayon 1.3.4 2017-09-16 CRAN (R 4.0.0)
## 16 data.table 1.13.0 2020-07-24 CRAN (R 4.0.2)
## 17 DBI 1.1.0 2019-12-15 CRAN (R 4.0.0)
## 18 dbplyr 1.4.4.9000 2020-07-28 Github (tidyverse/dbplyr@a6ed629)
## 19 deldir 0.1-28 2020-07-15 CRAN (R 4.0.2)
## 20 desc 1.2.0 2018-05-01 CRAN (R 4.0.0)
## 21 devtools 2.3.1.9000 2020-07-31 Github (r-lib/devtools@df619ce)
## 22 digest 0.6.25 2020-02-23 CRAN (R 4.0.0)
## 23 dplyr 1.0.1.9001 2020-08-03 Github (tidyverse/dplyr@dc3e0e6)
## 24 ellipsis 0.3.1.9000 2020-07-18 Github (r-lib/ellipsis@57a5071)
## 25 evaluate 0.14 2019-05-28 CRAN (R 4.0.0)
## 26 extrafont 0.17 2014-12-08 CRAN (R 4.0.2)
## 27 extrafontdb 1.0 2012-06-11 CRAN (R 4.0.0)
## 28 fansi 0.4.1 2020-01-08 CRAN (R 4.0.0)
## 29 farver 2.0.3 2020-01-16 CRAN (R 4.0.0)
## 30 fastmap 1.0.1 2019-10-08 CRAN (R 4.0.0)
## 31 fitdistrplus 1.1-1 2020-05-19 CRAN (R 4.0.0)
## 32 forcats 0.5.0.9000 2020-05-28 Github (tidyverse/forcats@ab81d1b)
## 33 fs 1.5.0.9000 2020-08-03 Github (r-lib/fs@93e70a9)
## 34 future 1.18.0 2020-07-09 CRAN (R 4.0.2)
## 35 future.apply 1.6.0 2020-07-01 CRAN (R 4.0.2)
## 36 generics 0.0.2 2018-11-29 CRAN (R 4.0.0)
## 37 ggplot2 3.3.2.9000 2020-08-03 Github (tidyverse/ggplot2@f0e561e)
## 38 ggrepel 0.9.0 2020-07-24 Github (slowkow/ggrepel@4d0ef50)
## 39 ggridges 0.5.2 2020-01-12 CRAN (R 4.0.0)
## 40 ggthemes 4.2.0 2019-05-13 CRAN (R 4.0.0)
## 41 globals 0.12.5 2019-12-07 CRAN (R 4.0.0)
## 42 glue 1.4.1.9000 2020-07-07 Github (tidyverse/glue@205f18b)
## 43 goftest 1.2-2 2019-12-02 CRAN (R 4.0.2)
## 44 gridExtra 2.3 2017-09-09 CRAN (R 4.0.0)
## 45 gt 0.2.1 2020-08-01 Github (rstudio/gt@6058358)
## 46 gtable 0.3.0 2019-03-25 CRAN (R 4.0.0)
## 47 haven 2.3.1 2020-06-01 CRAN (R 4.0.0)
## 48 hms 0.5.3 2020-01-08 CRAN (R 4.0.0)
## 49 htmltools 0.5.0 2020-06-16 CRAN (R 4.0.1)
## 50 htmlwidgets 1.5.1 2019-10-08 CRAN (R 4.0.0)
## 51 httpuv 1.5.4 2020-06-06 CRAN (R 4.0.0)
## 52 httr 1.4.2 2020-07-20 CRAN (R 4.0.2)
## 53 ica 1.0-2 2018-05-24 CRAN (R 4.0.0)
## 54 igraph 1.2.5 2020-03-19 CRAN (R 4.0.2)
## 55 irlba 2.3.3 2019-02-05 CRAN (R 4.0.2)
## 56 jsonlite 1.7.0 2020-06-25 CRAN (R 4.0.2)
## 57 KernSmooth 2.23-17 2020-04-26 CRAN (R 4.0.2)
## 58 knitr 1.29 2020-06-23 CRAN (R 4.0.2)
## 59 labeling 0.3 2014-08-23 CRAN (R 4.0.0)
## 60 later 1.1.0.1 2020-06-05 CRAN (R 4.0.0)
## 61 lattice 0.20-41 2020-04-02 CRAN (R 4.0.2)
## 62 lazyeval 0.2.2 2019-03-15 CRAN (R 4.0.0)
## 63 leiden 0.3.3 2020-02-04 CRAN (R 4.0.0)
## 64 lifecycle 0.2.0 2020-03-06 CRAN (R 4.0.0)
## 65 listenv 0.8.0 2019-12-05 CRAN (R 4.0.0)
## 66 lmtest 0.9-37 2019-04-30 CRAN (R 4.0.2)
## 67 lubridate 1.7.9 2020-07-11 Github (tidyverse/lubridate@de2ee09)
## 68 magrittr 1.5.0.9000 2020-08-03 Github (tidyverse/magrittr@d6731e3)
## 69 MASS 7.3-51.6 2020-04-26 CRAN (R 4.0.2)
## 70 Matrix 1.2-18 2019-11-27 CRAN (R 4.0.2)
## 71 memoise 1.1.0 2017-04-21 CRAN (R 4.0.0)
## 72 mgcv 1.8-31 2019-11-09 CRAN (R 4.0.2)
## 73 mime 0.9 2020-02-04 CRAN (R 4.0.0)
## 74 miniUI 0.1.1.1 2018-05-18 CRAN (R 4.0.0)
## 75 modelr 0.1.8.9000 2020-05-19 Github (tidyverse/modelr@16168e0)
## 76 munsell 0.5.0 2018-06-12 CRAN (R 4.0.0)
## 77 nlme 3.1-148 2020-05-24 CRAN (R 4.0.2)
## 78 patchwork 1.0.1.9000 2020-06-22 Github (thomasp85/patchwork@82a5e03)
## 79 pbapply 1.4-2 2019-08-31 CRAN (R 4.0.0)
## 80 pillar 1.4.6.9000 2020-07-21 Github (r-lib/pillar@8aef8f2)
## 81 pkgbuild 1.1.0.9000 2020-07-14 Github (r-lib/pkgbuild@3a87bd9)
## 82 pkgconfig 2.0.3 2019-09-22 CRAN (R 4.0.0)
## 83 pkgload 1.1.0 2020-05-29 CRAN (R 4.0.0)
## 84 plotly 4.9.2.1 2020-04-04 CRAN (R 4.0.0)
## 85 plyr 1.8.6 2020-03-03 CRAN (R 4.0.0)
## 86 png 0.1-7 2013-12-03 CRAN (R 4.0.0)
## 87 polyclip 1.10-0 2019-03-14 CRAN (R 4.0.2)
## 88 prettyunits 1.1.1 2020-01-24 CRAN (R 4.0.2)
## 89 processx 3.4.3 2020-07-05 CRAN (R 4.0.2)
## 90 promises 1.1.1 2020-06-09 CRAN (R 4.0.0)
## 91 ps 1.3.3 2020-05-08 CRAN (R 4.0.0)
## 92 purrr 0.3.4.9000 2020-08-03 Github (tidyverse/purrr@eefc561)
## 93 R6 2.4.1.9000 2020-07-18 Github (r-lib/R6@1415d11)
## 94 RANN 2.6.1 2019-01-08 CRAN (R 4.0.0)
## 95 RColorBrewer 1.1-2 2014-12-07 CRAN (R 4.0.0)
## 96 Rcpp 1.0.5 2020-07-06 CRAN (R 4.0.2)
## 97 RcppAnnoy 0.0.16 2020-03-08 CRAN (R 4.0.0)
## 98 readr 1.3.1.9000 2020-07-16 Github (tidyverse/readr@2ab51b2)
## 99 readxl 1.3.1.9000 2020-05-28 Github (tidyverse/readxl@3815961)
## 100 remotes 2.2.0.9000 2020-07-23 Github (r-lib/remotes@d7fe461)
## 101 reprex 0.3.0 2019-05-16 CRAN (R 4.0.0)
## 102 reshape2 1.4.4 2020-04-09 CRAN (R 4.0.0)
## 103 reticulate 1.16 2020-05-27 CRAN (R 4.0.2)
## 104 rlang 0.4.7.9000 2020-07-31 Github (r-lib/rlang@a144ac0)
## 105 rmarkdown 2.3.3 2020-07-25 Github (rstudio/rmarkdown@204aa41)
## 106 ROCR 1.0-11 2020-05-02 CRAN (R 4.0.0)
## 107 rpart 4.1-15 2019-04-12 CRAN (R 4.0.2)
## 108 rprojroot 1.3-2 2018-01-03 CRAN (R 4.0.0)
## 109 rstudioapi 0.11.0-9000 2020-07-31 Github (rstudio/rstudioapi@aa17630)
## 110 rsvd 1.0.3 2020-02-17 CRAN (R 4.0.0)
## 111 Rtsne 0.16 2020-07-03 Github (jkrijthe/Rtsne@14b195f)
## 112 Rttf2pt1 1.3.8 2020-01-10 CRAN (R 4.0.0)
## 113 rvest 0.3.6 2020-07-25 CRAN (R 4.0.2)
## 114 sass 0.2.0 2020-03-18 CRAN (R 4.0.2)
## 115 scales 1.1.1.9000 2020-07-24 Github (r-lib/scales@9ff4757)
## 116 sctransform 0.2.1 2019-12-17 CRAN (R 4.0.0)
## 117 sessioninfo 1.1.1.9000 2020-07-18 Github (r-lib/sessioninfo@791705b)
## 118 Seurat 3.2.0.9006 2020-08-01 Github (satijalab/seurat@a1f2f73)
## 119 shiny 1.5.0.9001 2020-08-03 Github (rstudio/shiny@0b82b12)
## 120 spatstat 1.64-1 2020-05-12 CRAN (R 4.0.2)
## 121 spatstat.data 1.4-3 2020-01-26 CRAN (R 4.0.2)
## 122 spatstat.utils 1.17-0 2020-02-07 CRAN (R 4.0.2)
## 123 stringi 1.4.6 2020-02-17 CRAN (R 4.0.0)
## 124 stringr 1.4.0.9000 2020-06-01 Github (tidyverse/stringr@f70c4ba)
## 125 styler 1.3.2.9000 2020-07-25 Github (r-lib/styler@16d815e)
## 126 survival 3.2-3 2020-06-13 CRAN (R 4.0.2)
## 127 tensor 1.5 2012-05-05 CRAN (R 4.0.2)
## 128 testthat 2.99.0.9000 2020-07-28 Github (r-lib/testthat@0af11cd)
## 129 tibble 3.0.3.9000 2020-07-21 Github (tidyverse/tibble@b4eec19)
## 130 tidyr 1.1.1.9000 2020-07-31 Github (tidyverse/tidyr@61e9209)
## 131 tidyselect 1.1.0.9000 2020-07-11 Github (tidyverse/tidyselect@69fdc9…
## 132 tidyverse 1.3.0.9000 2020-06-01 Github (hadley/tidyverse@8a0bb99)
## 133 usethis 1.6.1.9001 2020-08-01 Github (r-lib/usethis@00e0600)
## 134 uwot 0.1.8.9000 2020-08-03 Github (jlmelville/uwot@db9e397)
## 135 vctrs 0.3.2.9000 2020-07-23 Github (r-lib/vctrs@df8a659)
## 136 viridisLite 0.3.0 2018-02-01 CRAN (R 4.0.0)
## 137 withr 2.2.0 2020-04-20 CRAN (R 4.0.0)
## 138 xfun 0.16 2020-07-24 CRAN (R 4.0.2)
## 139 xml2 1.3.2 2020-04-23 CRAN (R 4.0.0)
## 140 xtable 1.8-4 2019-04-21 CRAN (R 4.0.0)
## 141 yaml 2.2.1 2020-02-01 CRAN (R 4.0.0)
## 142 zoo 1.8-8 2020-05-02 CRAN (R 4.0.0)