Fan, Y., Min, Z., Alsolami, S., Ma, Z., Zhang, E., Chen, W., Zhong, K., Pei, W., Kang, X., Zhang, P., et al. (2021). Generation of human blastocyst-like structures from pluripotent stem cells. Cell Discovery 7, 1–14.

  • BioProject Accession: PRJNA667174
  • GEO Accession: GSE158971



Load required packages.

library(tidyverse)
library(Matrix)
library(patchwork)
library(extrafont)
# library(magrittr)
Sys.time()
## [1] "2021-09-11 13:52:01 CDT"

Data preparation

Functions loading

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

Data loading

PROJECT_DIR <- "/Users/jialei/Dropbox/Data/Projects/UTSW/Peri-implantation"

Matrix

ad <- reticulate::import(module = "anndata", convert = TRUE)
print(ad$`__version__`)
## [1] "0.7.5"
BACKED <- NULL
adata <- ad$read_h5ad(
    filename = file.path(
        PROJECT_DIR,
        "raw/public/PRJNA667174",
        "matrix",
        "adata.h5ad"
    ),
    backed = BACKED
)

matrix_readcount_use <- adata |> convert_adata()
matrix_readcount_use |> dim()
## [1] 33538 30439

Embedding

EMBEDDING_FILE <- "embedding_ncomponents10_ccc1_seed20210719.csv.gz"

embedding <- vroom::vroom(
    file = file.path(
        PROJECT_DIR,
        "raw/public/PRJNA667174",
        "clustering/PRJNA667174/exploring",
        "Scanpy_Harmony",
        EMBEDDING_FILE
    )
)

embedding |> head()

Metadata

cell_metadata <- vroom::vroom(
    file = file.path(
        PROJECT_DIR,
        "raw/public/PRJNA667174",
        "matrix",
        "cell_metadata.csv"
    )
) |>
    dplyr::left_join(
        adata$obs |>
            tibble::rownames_to_column(var = "cell")
    )

cell_metadata |> head()
purrr::walk(list(matrix_readcount_use, cell_metadata), function(x) {
    print(object.size(x), units = "auto", standard = "SI")
})
## 1.2 GB
## 3.9 MB

Single-cell transcriptome analysis

embedding <- embedding |>
    dplyr::left_join(
        cell_metadata |>
            dplyr::select(-batch),
        by = c("cell" = "cell")
    ) |>
    dplyr::mutate(
        developmental_stage = factor(
            developmental_stage,
            levels = c("D6", "D8", "D10")
        ),
        lineage = factor(
            lineage,
            levels = c(
                c("EPI", "PE", "TE", "IM", "CTB", "STB")
            )
        )
    )
embedding |>
    dplyr::group_by(
        batch
    ) |>
    dplyr::summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        num_features = median(num_features),
        median_mt_percentage = median(mt_percentage)
    ) |>
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
batch num_cells median_umis num_features median_mt_percentage
GSM4816780 10933 6203.0 2240.0 0.007092199
GSM4816781 11634 12780.5 3357.0 0.052984867
GSM4816782 7872 12238.0 3778.5 0.065663483
embedding |>
    dplyr::group_by(
        developmental_stage
    ) |>
    dplyr::summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        num_features = median(num_features),
        median_mt_percentage = median(mt_percentage)
    ) |>
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
developmental_stage num_cells median_umis num_features median_mt_percentage
D6 10933 6203.0 2240.0 0.007092199
D8 11634 12780.5 3357.0 0.052984867
D10 7872 12238.0 3778.5 0.065663483
embedding |>
    dplyr::group_by(
        leiden
    ) |>
    dplyr::summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        num_features = median(num_features),
        median_mt_percentage = median(mt_percentage)
    ) |>
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
leiden num_cells median_umis num_features median_mt_percentage
0 4069 1534.0 831.0 0.021715527
1 3566 4522.0 1807.5 0.008945333
2 3539 30389.0 5452.0 0.055672797
3 3224 23761.0 4960.5 0.058259888
4 2780 26048.0 5237.5 0.055429823
5 2434 23133.5 4583.0 0.041058811
6 2396 796.0 514.5 0.044039793
7 2255 1241.0 710.0 0.011739594
8 1186 3766.0 1760.0 0.082827767
9 1106 17752.0 4222.5 0.054710045
10 1031 24862.0 4980.0 0.044412686
11 966 3412.0 1511.5 0.004119256
12 663 13107.0 3648.0 0.060423344
13 595 31669.0 5599.0 0.053610239
14 363 25393.0 5062.0 0.053125720
15 266 1410.0 735.5 0.038481308

Embedding visualization

x_column <- "x_umap_min_dist=0.1"
y_column <- "y_umap_min_dist=0.1"


# GEOM_POINT_SIZE <- 1.25
GEOM_POINT_SIZE <- 0.2
EMBEDDING_TITLE_PREFIX <- "UMAP"
RASTERISED <- TRUE

Clustering & UMI & MT

p_embedding_leiden <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = embedding$leiden |> as.factor(),
    label = paste(EMBEDDING_TITLE_PREFIX, "Leiden", sep = "; "),
    label_position = NULL,
    show_color_value_labels = TRUE,
    show_color_legend = FALSE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    shuffle_values = FALSE,
    rasterise = RASTERISED
) +
    theme_customized()

CB_POSITION <- c(0.8, 0.995)
p_embedding_UMI <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = log10(embedding$num_umis),
    label = paste(EMBEDDING_TITLE_PREFIX, "UMI", sep = "; "),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = TRUE,
    shuffle_values = TRUE,
    rasterise = RASTERISED,
    legend_size = 2
) +
    theme_customized(
        x = CB_POSITION[1],
        legend_key_size = 2,
        legend_text_size = 5
    )

p_embedding_MT <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = embedding$mt_percentage,
    label = paste(EMBEDDING_TITLE_PREFIX, "MT%", sep = "; "),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE * 2,
    sort_values = TRUE,
    shuffle_values = TRUE,
    rasterise = RASTERISED,
    legend_size = 2
) +
    theme_customized(
        x = CB_POSITION[1],
        legend_key_size = 2,
        legend_text_size = 5
    )


Clustering of 30,439 cells.

purrr::reduce(
    list(
        p_embedding_leiden,
        p_embedding_UMI,
        p_embedding_MT
    ),
    `+`
) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

Lineage & origin & developmental stage

p_embedding_lineage <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = embedding$lineage,
    label = paste(EMBEDDING_TITLE_PREFIX, "Lineage", sep = "; "),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    shuffle_values = TRUE,
    rasterise = RASTERISED,
    legend_size = 2
) +
    theme_customized(
        x = CB_POSITION[1],
        legend_key_size = 2,
        legend_text_size = 5
    )

p_embedding_batch <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = embedding$batch |> as.factor(),
    label = paste(EMBEDDING_TITLE_PREFIX, "Batch", sep = "; "),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    shuffle_values = TRUE,
    rasterise = RASTERISED,
    legend_size = 2
) +
    theme_customized(
        x = CB_POSITION[1] - 0.1,
        legend_key_size = 2,
        legend_text_size = 5
    )

p_embedding_developmental_stage <- plot_embedding(
    embedding = embedding[, c(x_column, y_column)],
    color_values = embedding$developmental_stage |> as.factor(),
    label = paste(EMBEDDING_TITLE_PREFIX, "Developmental stage", sep = "; "),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    shuffle_values = TRUE,
    rasterise = RASTERISED,
    legend_size = 2
) +
    theme_customized(
        x = CB_POSITION[1],
        legend_key_size = 2,
        legend_text_size = 5
    )
purrr::reduce(
    list(
        p_embedding_lineage,
        p_embedding_batch,
        p_embedding_developmental_stage
    ),
    `+`
) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

Developmental stage

embedding |>
    dplyr::group_by(
        developmental_stage
    ) |>
    dplyr::summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        num_features = median(num_features),
        median_mt_percentage = median(mt_percentage)
    ) |>
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
developmental_stage num_cells median_umis num_features median_mt_percentage
D6 10933 6203.0 2240.0 0.007092199
D8 11634 12780.5 3357.0 0.052984867
D10 7872 12238.0 3778.5 0.065663483
purrr::map(levels(embedding$developmental_stage), function(x) {
    plot_embedding(
        embedding = embedding[, c(x_column, y_column)],
        color_values = as.numeric(
            embedding$developmental_stage == x
        ) |> as.factor(),
        label = paste(EMBEDDING_TITLE_PREFIX, x, sep = "; "),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = FALSE,
        geom_point_size = GEOM_POINT_SIZE,
        sort_values = TRUE,
        rasterise = RASTERISED
    ) +
        theme_customized() +
        scale_color_manual(
            values = c("grey70", "salmon")
        )
}) |>
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

Lineage

embedding |>
    dplyr::group_by(
        lineage
    ) |>
    dplyr::summarise(
        num_cells = n(),
        median_umis = median(num_umis),
        num_features = median(num_features),
        median_mt_percentage = median(mt_percentage)
    ) |>
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
lineage num_cells median_umis num_features median_mt_percentage
EPI 1340 28910.0 5194.0 0.018937359
PE 2083 23615.0 4849.0 0.020250376
TE 2472 2253.5 1112.5 0.003417852
IM 6478 4360.5 1841.0 0.008306207
CTB 9438 22634.5 4912.0 0.066582772
STB 8628 2255.5 1219.0 0.030517943
purrr::map(levels(embedding$lineage), function(x) {
    plot_embedding(
        embedding = embedding[, c(x_column, y_column)],
        color_values = as.numeric(embedding$lineage == x) |> as.factor(),
        label = paste(EMBEDDING_TITLE_PREFIX, x, sep = "; "),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = FALSE,
        geom_point_size = GEOM_POINT_SIZE,
        sort_values = FALSE,
        rasterise = RASTERISED,
        legend_size = 2
    ) +
        theme_customized(
            x = CB_POSITION[1] - 0.3,
            legend_key_size = 2,
            legend_text_size = 5
        ) +
        scale_color_manual(
            values = c("grey70", "salmon")
        )
}) |>
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

Composition

p_barplot_composition_developmental_stage <- calc_group_composition(
    data = embedding,
    x = "leiden",
    group = "developmental_stage"
) |>
    dplyr::mutate(
        leiden = factor(leiden)
    ) |>
    plot_barplot(
        x = "leiden",
        y = "percentage",
        z = "developmental_stage",
        legend_ncol = 1
    )

p_barplot_composition_lineage <- calc_group_composition(
    data = embedding,
    x = "leiden",
    group = "lineage"
) |>
    dplyr::mutate(
        leiden = factor(leiden)
    ) |>
    plot_barplot(
        x = "leiden",
        y = "percentage",
        z = "lineage",
        legend_ncol = 1
    )

p_barplot_combined <- list(
    p_barplot_composition_lineage,
    p_barplot_composition_developmental_stage
) |>
    purrr::reduce(`+`) +
    patchwork::plot_layout(nrow = 2, guides = "collect") +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )
p_barplot_combined

calc_group_composition(
    data = embedding,
    x = "lineage",
    group = "developmental_stage"
) |>
    plot_barplot(
        x = "lineage",
        y = "percentage",
        z = "developmental_stage",
        legend_ncol = 1
    )

calc_group_composition(
    data = embedding,
    x = "developmental_stage",
    group = "lineage"
) |>
    plot_barplot(
        x = "developmental_stage",
        y = "percentage",
        z = "lineage",
        legend_ncol = 1
    )

Expression

Embedding


FEATURES_SELECTED <- c(
    "ENSG00000204531_POU5F1",
    "ENSG00000111704_NANOG",
    "ENSG00000171872_KLF17",
    "ENSG00000186103_ARGFX",
    #
    "ENSG00000164736_SOX17",
    "ENSG00000125798_FOXA2",
    "ENSG00000136574_GATA4",
    "ENSG00000134853_PDGFRA",
    #
    "ENSG00000179348_GATA2",
    "ENSG00000070915_SLC12A3",
    "ENSG00000165556_CDX2",
    "ENSG00000007866_TEAD3"
)
purrr::map(FEATURES_SELECTED, function(x) {
    selected_feature <- x

    cat(selected_feature, "\n")
    values <- log10(calc_cpm(matrix_readcount_use[, embedding$cell])[selected_feature, ] + 1)

    p1 <- plot_embedding(
        embedding = embedding[, c(x_column, y_column)],
        color_values = values,
        label = paste(
            EMBEDDING_TITLE_PREFIX,
            selected_feature |> stringr::str_remove(pattern = "^E.+_"),
            sep = "; "
        ),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = TRUE,
        geom_point_size = GEOM_POINT_SIZE * 2,
        sort_values = TRUE,
        shuffle_values = FALSE,
        rasterise = RASTERISED,
        legend_size = 2
    ) +
        scale_color_viridis_c(
            na.value = "grey80"
        ) +
        theme_customized(
            x = CB_POSITION[1] + 0.05,
            legend_key_size = 2,
            legend_text_size = 5
        )

    return(p1)
}) |>
    # unlist(recursive = FALSE) |>
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )
## ENSG00000204531_POU5F1 
## ENSG00000111704_NANOG 
## ENSG00000171872_KLF17 
## ENSG00000186103_ARGFX 
## ENSG00000164736_SOX17 
## ENSG00000125798_FOXA2 
## ENSG00000136574_GATA4 
## ENSG00000134853_PDGFRA 
## ENSG00000179348_GATA2 
## ENSG00000070915_SLC12A3 
## ENSG00000165556_CDX2 
## ENSG00000007866_TEAD3



R session info

devtools::session_info()$platform
##  setting  value                       
##  version  R version 4.1.1 (2021-08-10)
##  os       macOS Big Sur 10.16         
##  system   x86_64, darwin20.4.0        
##  ui       unknown                     
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Chicago             
##  date     2021-09-11
devtools::session_info()$pack |>
    as_tibble() |>
    dplyr::select(
        package,
        loadedversion,
        date,
        `source`
    ) |>
    # print(n = nrow(.))
    gt::gt() |>
    gt::tab_options(table.font.size = "median")
package loadedversion date source
assertthat 0.2.1 2019-03-21 CRAN (R 4.1.1)
backports 1.2.1 2020-12-09 CRAN (R 4.1.1)
beeswarm 0.4.0 2021-06-01 CRAN (R 4.1.1)
bit 4.0.4 2020-08-04 CRAN (R 4.1.1)
bit64 4.0.5 2020-08-30 CRAN (R 4.1.1)
broom 0.7.9 2021-07-27 CRAN (R 4.1.1)
bslib 0.3.0 2021-09-02 CRAN (R 4.1.1)
cachem 1.0.6 2021-08-19 CRAN (R 4.1.1)
callr 3.7.0 2021-04-20 CRAN (R 4.1.1)
cellranger 1.1.0 2016-07-27 CRAN (R 4.1.1)
checkmate 2.0.0 2020-02-06 CRAN (R 4.1.1)
cli 3.0.1 2021-07-17 CRAN (R 4.1.1)
colorspace 2.0-2 2021-06-24 CRAN (R 4.1.1)
crayon 1.4.1 2021-02-08 CRAN (R 4.1.1)
DBI 1.1.1 2021-01-15 CRAN (R 4.1.1)
dbplyr 2.1.1 2021-04-06 CRAN (R 4.1.1)
desc 1.3.0 2021-03-05 CRAN (R 4.1.1)
devtools 2.4.2 2021-08-19 Github (r-lib/devtools@e10658f)
digest 0.6.27 2020-10-24 CRAN (R 4.1.1)
dplyr 1.0.7.9000 2021-09-08 Github (tidyverse/dplyr@47b3fdf)
ellipsis 0.3.2 2021-04-29 CRAN (R 4.1.1)
evaluate 0.14 2019-05-28 CRAN (R 4.1.1)
extrafont 0.17 2014-12-08 CRAN (R 4.1.1)
extrafontdb 1.0 2012-06-11 CRAN (R 4.1.1)
fansi 0.5.0 2021-05-25 CRAN (R 4.1.1)
farver 2.1.0 2021-02-28 CRAN (R 4.1.1)
fastmap 1.1.0 2021-01-25 CRAN (R 4.1.1)
forcats 0.5.1.9000 2021-08-15 Github (tidyverse/forcats@b5fce89)
fs 1.5.0.9000 2021-08-15 Github (r-lib/fs@10e38dd)
generics 0.1.0 2020-10-31 CRAN (R 4.1.1)
ggbeeswarm 0.6.0 2017-08-07 CRAN (R 4.1.1)
ggplot2 3.3.5.9000 2021-09-07 Github (tidyverse/ggplot2@ffcfaf7)
ggrastr 0.2.3 2021-08-15 Github (VPetukhov/ggrastr@1ef0ff5)
glue 1.4.2 2020-08-27 CRAN (R 4.1.1)
gt 0.3.1 2021-08-07 CRAN (R 4.1.1)
gtable 0.3.0.9000 2021-08-15 Github (r-lib/gtable@0fc53e0)
haven 2.4.3 2021-08-04 CRAN (R 4.1.1)
highr 0.9 2021-04-16 CRAN (R 4.1.1)
hms 1.1.0 2021-05-17 CRAN (R 4.1.1)
htmltools 0.5.2 2021-08-25 CRAN (R 4.1.1)
httr 1.4.2 2020-07-20 CRAN (R 4.1.1)
jquerylib 0.1.4 2021-04-26 CRAN (R 4.1.1)
jsonlite 1.7.2 2020-12-09 CRAN (R 4.1.1)
knitr 1.34 2021-09-09 CRAN (R 4.1.1)
labeling 0.4.2 2020-10-20 CRAN (R 4.1.1)
lattice 0.20-44 2021-05-02 CRAN (R 4.1.1)
lifecycle 1.0.0 2021-02-15 CRAN (R 4.1.1)
lubridate 1.7.10 2021-02-26 CRAN (R 4.1.1)
magrittr 2.0.1 2020-11-17 CRAN (R 4.1.1)
Matrix 1.3-4 2021-06-01 CRAN (R 4.1.1)
memoise 2.0.0 2021-01-26 CRAN (R 4.1.1)
modelr 0.1.8 2020-05-19 CRAN (R 4.1.1)
munsell 0.5.0 2018-06-12 CRAN (R 4.1.1)
patchwork 1.1.0.9000 2021-08-15 Github (thomasp85/patchwork@79223d3)
pillar 1.6.2 2021-08-26 Github (r-lib/pillar@1058bda)
pkgbuild 1.2.0 2020-12-15 CRAN (R 4.1.1)
pkgconfig 2.0.3 2019-09-22 CRAN (R 4.1.1)
pkgload 1.2.1 2021-04-06 CRAN (R 4.1.1)
png 0.1-7 2013-12-03 CRAN (R 4.1.1)
prettyunits 1.1.1.9000 2021-08-15 Github (r-lib/prettyunits@8706d89)
processx 3.5.2 2021-04-30 CRAN (R 4.1.1)
ps 1.6.0 2021-02-28 CRAN (R 4.1.1)
purrr 0.3.4.9000 2021-08-15 Github (tidyverse/purrr@5aca9df)
R6 2.5.0.9000 2021-08-15 Github (r-lib/R6@1d70936)
ragg 1.1.3.9000 2021-08-15 Github (r-lib/ragg@adf5f06)
Rcpp 1.0.7 2021-07-07 CRAN (R 4.1.1)
readr 2.0.1.9000 2021-09-07 Github (tidyverse/readr@397a59a)
readxl 1.3.1.9000 2021-08-19 Github (tidyverse/readxl@649982a)
remotes 2.4.0.9001 2021-09-02 Github (r-lib/remotes@6a0e560)
reprex 2.0.1 2021-08-05 CRAN (R 4.1.1)
reticulate 1.20 2021-05-03 CRAN (R 4.1.1)
rlang 0.4.11.9001 2021-09-08 Github (r-lib/rlang@9c6291f)
rmarkdown 2.10.6 2021-09-02 Github (rstudio/rmarkdown@eaf6efc)
rprojroot 2.0.2 2020-11-15 CRAN (R 4.1.1)
rstudioapi 0.13.0-9000 2021-08-15 Github (rstudio/rstudioapi@96fad1d)
Rttf2pt1 1.3.9 2021-07-22 CRAN (R 4.1.1)
rvest 1.0.1 2021-07-26 CRAN (R 4.1.1)
sass 0.4.0 2021-05-12 CRAN (R 4.1.1)
scales 1.1.1 2020-05-11 CRAN (R 4.1.1)
sessioninfo 1.1.1 2018-11-05 CRAN (R 4.1.1)
stringi 1.7.4 2021-08-25 CRAN (R 4.1.1)
stringr 1.4.0 2019-02-10 CRAN (R 4.1.1)
styler 1.5.1.9001 2021-08-21 Github (r-lib/styler@2b1eeac)
systemfonts 1.0.2 2021-05-11 CRAN (R 4.1.1)
testthat 3.0.4.9000 2021-09-11 Github (r-lib/testthat@2dc496c)
textshaping 0.3.5 2021-06-09 CRAN (R 4.1.1)
tibble 3.1.4.9000 2021-08-26 Github (tidyverse/tibble@e3e40af)
tidyr 1.1.3.9000 2021-08-27 Github (tidyverse/tidyr@7947507)
tidyselect 1.1.1 2021-04-30 CRAN (R 4.1.1)
tidyverse 1.3.1.9000 2021-08-16 Github (tidyverse/tidyverse@195d8a4)
tzdb 0.1.2 2021-07-20 CRAN (R 4.1.1)
usethis 2.0.1.9000 2021-08-30 Github (r-lib/usethis@3385e14)
utf8 1.2.2 2021-07-24 CRAN (R 4.1.1)
vctrs 0.3.8 2021-04-29 CRAN (R 4.1.1)
vipor 0.4.5 2017-03-22 CRAN (R 4.1.1)
viridisLite 0.4.0 2021-04-13 CRAN (R 4.1.1)
vroom 1.5.4.9000 2021-09-11 Github (r-lib/vroom@c546abe)
withr 2.4.2 2021-04-18 CRAN (R 4.1.1)
xfun 0.25 2021-08-06 CRAN (R 4.1.1)
xml2 1.3.2 2020-04-23 CRAN (R 4.1.1)
yaml 2.2.1 2020-02-01 CRAN (R 4.1.1)