Takashima, Y., Guo, G., Loos, R., Nichols, J., Ficz, G., Krueger, F., Oxley, D., Santos, F., Clarke, J., Mansfield, W., et al. (2014). Resetting transcription factor control circuitry toward ground-state pluripotency in human. Cell 158, 1254–1269.

  • BioProject Accession: PRJEB7132
  • ArrayExpress Accession: E-MTAB-2857



Load required packages.

library(tidyverse)
library(magrittr)
library(Matrix)
library(extrafont)
library(ggrepel)
library(patchwork)
# library(tidylog)
Sys.time()
## [1] "2020-08-11 03:10:44 CDT"

Data preparation

SEED_USE <- 20200616
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 = ","
) %>%
    select(-c("organism", "Sample Name")) %>%
    rename_all(. %>% tolower()) %>%
    `colnames<-`(str_replace(
        string = colnames(.),
        pattern = " ", replacement = "_"
    )) %>%
    filter(organism == "Homo sapiens") %>%
    select(
        sample_name,
        run,
        biosample,
        alias,
        cell_line,
        organism,
        title
    ) %>%
    mutate(
        sample_description = str_remove(
            string = title,
            pattern = "_R\\d$"
        )
    )
## Parsed with column specification:
## cols(
##   .default = col_character(),
##   AvgSpotLen = col_double(),
##   Bases = col_double(),
##   Bytes = col_double(),
##   `ENA-FIRST-PUBLIC (run)` = col_date(format = ""),
##   `ENA-LAST-UPDATE (run)` = col_date(format = ""),
##   INSDC_first_public = col_datetime(format = ""),
##   INSDC_last_update = col_datetime(format = ""),
##   ReleaseDate = col_datetime(format = "")
## )
## See spec(...) for full column specifications.
cell_metadata

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(
##   Geneid = col_character(),
##   Chr = col_character(),
##   Start = col_character(),
##   End = col_character(),
##   Strand = col_character(),
##   Length = col_double(),
##   `../aln/ERR590398_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double(),
##   `../aln/ERR590399_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double(),
##   `../aln/ERR590400_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double(),
##   `../aln/ERR590401_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double(),
##   `../aln/ERR590408_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double(),
##   `../aln/ERR590410_rnaseq/aln/Aligned.sortedByCoord.out_deduped.bam` = col_double()
## )
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     6
stopifnot(
    rownames(matrix_readcount_use) == gene_symbo_info$X1
)
rownames(matrix_readcount_use) <- paste(
    rownames(matrix_readcount_use),
    gene_symbo_info$X2,
    sep = "_"
)

colnames(matrix_readcount_use) <- colnames(matrix_readcount_use) %>%
    enframe(value = "run") %>%
    left_join(cell_metadata, by = c("run" = "run")) %>%
    pull("sample_name")


matrix_cpm_use <- calc_cpm(m = matrix_readcount_use)

Preprocessing

Summarize sequencing statistics.

cell_metadata %>%
    mutate(
        num_umis = matrix_readcount_use[, .$sample_name] %>% colSums(),
        num_genes = (matrix_readcount_use[, .$sample_name] > 0) %>% colSums()
    ) %>%
    group_by(sample_description) %>%
    summarise(
        num_samples = n(),
        num_umis = median(num_umis),
        num_genes = median(num_genes)
    ) %>%
    arrange(sample_description) %>%
    as.data.frame() %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
## `summarise()` ungrouping output (override with `.groups` argument)

sample_description num_samples num_umis num_genes
H9 3 15202211 22575
H9_reset 3 80337013 25986

Filter uninformative genes.

matrix_readcount_norm <- matrix_readcount_use
matrix_readcount_norm <- matrix_readcount_norm[
    Matrix::rowSums(
        matrix_readcount_norm
    ) >= MINIMAL_NUM_COUNTS_REQUIRED_FOR_GENE,
]
dim(matrix_readcount_norm)
## [1] 19546     6

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:33) %>%
    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"),
    )
}
embedding <- pca_out$x %>%
    as.data.frame() %>%
    rownames_to_column(var = "sample_name") %>%
    select(sample_name:PC3) %>%
    left_join(cell_metadata, by = "sample_name") %>%
    dplyr::rename(
        x_pca = PC1,
        y_pca = PC2,
        z_pca = PC3
    ) %>%
    relocate(x_pca, y_pca, z_pca, .after = last_col())
p_embedding_pca1 <- embedding %>%
    mutate(
        category = "PCA"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_pca,
        y = y_pca,
        color = sample_description,
        shape = cell_line
    ) +
    scale_color_manual(
        values = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(embedding$sample_description))
        )
    ) +
    scale_shape_manual(values = c(15)) + # seq(length(unique(embedding$cell_line)))) +
    add_xy_label_pca()


p_embedding_pca2 <- embedding %>%
    mutate(
        category = "PCA"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_pca,
        y = z_pca,
        color = sample_description,
        shape = cell_line
    ) +
    scale_color_manual(
        values = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(embedding$sample_description))
        )
    ) +
    scale_shape_manual(values = c(15)) +
    add_xy_label_pca(y = "PC3")
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"),
    )
}

t-SNE

N_COMPONENTS <- 6

set.seed(seed = SEED_USE)
embedding_rtsne <- Rtsne::Rtsne(
    X = pca_out$x[, 1:N_COMPONENTS],
    perplexity = 1,
    check_duplicates = FALSE,
    pca = FALSE,
    max_iter = 3000,
    verbose = TRUE
)$Y
## Read the 6 x 6 data matrix successfully!
## Using no_dims = 2, perplexity = 1.000000, and theta = 0.500000
## Computing input similarities...
## Building tree...
## Done in 0.00 seconds (sparsity = 0.611111)!
## Learning embedding...
## Iteration 50: error is 57.270342 (50 iterations in 0.00 seconds)
## Iteration 100: error is 52.420417 (50 iterations in 0.00 seconds)
## Iteration 150: error is 65.648673 (50 iterations in 0.00 seconds)
## Iteration 200: error is 54.581777 (50 iterations in 0.00 seconds)
## Iteration 250: error is 79.670690 (50 iterations in 0.00 seconds)
## Iteration 300: error is 1.111540 (50 iterations in 0.00 seconds)
## Iteration 350: error is 0.409191 (50 iterations in 0.00 seconds)
## Iteration 400: error is 0.154047 (50 iterations in 0.00 seconds)
## Iteration 450: error is 0.127597 (50 iterations in 0.00 seconds)
## Iteration 500: error is 0.111444 (50 iterations in 0.00 seconds)
## Iteration 550: error is 0.094854 (50 iterations in 0.00 seconds)
## Iteration 600: error is 0.107957 (50 iterations in 0.00 seconds)
## Iteration 650: error is 0.107906 (50 iterations in 0.00 seconds)
## Iteration 700: error is 0.121028 (50 iterations in 0.00 seconds)
## Iteration 750: error is 0.111088 (50 iterations in 0.00 seconds)
## Iteration 800: error is 0.108210 (50 iterations in 0.00 seconds)
## Iteration 850: error is 0.108115 (50 iterations in 0.00 seconds)
## Iteration 900: error is 0.107947 (50 iterations in 0.00 seconds)
## Iteration 950: error is 0.107827 (50 iterations in 0.00 seconds)
## Iteration 1000: error is 0.116671 (50 iterations in 0.00 seconds)
## Iteration 1050: error is 0.107830 (50 iterations in 0.00 seconds)
## Iteration 1100: error is 0.107810 (50 iterations in 0.00 seconds)
## Iteration 1150: error is 0.096893 (50 iterations in 0.00 seconds)
## Iteration 1200: error is 0.107799 (50 iterations in 0.00 seconds)
## Iteration 1250: error is 0.107781 (50 iterations in 0.00 seconds)
## Iteration 1300: error is 0.109558 (50 iterations in 0.00 seconds)
## Iteration 1350: error is 0.107765 (50 iterations in 0.00 seconds)
## Iteration 1400: error is 0.107751 (50 iterations in 0.00 seconds)
## Iteration 1450: error is 0.845329 (50 iterations in 0.00 seconds)
## Iteration 1500: error is 0.332005 (50 iterations in 0.00 seconds)
## Iteration 1550: error is 0.139264 (50 iterations in 0.00 seconds)
## Iteration 1600: error is 0.126302 (50 iterations in 0.00 seconds)
## Iteration 1650: error is 0.113705 (50 iterations in 0.00 seconds)
## Iteration 1700: error is 0.111947 (50 iterations in 0.00 seconds)
## Iteration 1750: error is 0.108587 (50 iterations in 0.00 seconds)
## Iteration 1800: error is 0.107894 (50 iterations in 0.00 seconds)
## Iteration 1850: error is 0.107774 (50 iterations in 0.00 seconds)
## Iteration 1900: error is 0.108137 (50 iterations in 0.00 seconds)
## Iteration 1950: error is 0.107648 (50 iterations in 0.00 seconds)
## Iteration 2000: error is 0.107638 (50 iterations in 0.00 seconds)
## Iteration 2050: error is 0.107630 (50 iterations in 0.00 seconds)
## Iteration 2100: error is 0.107628 (50 iterations in 0.00 seconds)
## Iteration 2150: error is 0.107627 (50 iterations in 0.00 seconds)
## Iteration 2200: error is 0.072551 (50 iterations in 0.00 seconds)
## Iteration 2250: error is 0.447330 (50 iterations in 0.00 seconds)
## Iteration 2300: error is 0.411598 (50 iterations in 0.00 seconds)
## Iteration 2350: error is 0.222511 (50 iterations in 0.00 seconds)
## Iteration 2400: error is 0.158287 (50 iterations in 0.00 seconds)
## Iteration 2450: error is 0.138366 (50 iterations in 0.00 seconds)
## Iteration 2500: error is 0.122092 (50 iterations in 0.00 seconds)
## Iteration 2550: error is 0.112900 (50 iterations in 0.00 seconds)
## Iteration 2600: error is 0.101245 (50 iterations in 0.00 seconds)
## Iteration 2650: error is 2.014337 (50 iterations in 0.00 seconds)
## Iteration 2700: error is 0.650924 (50 iterations in 0.00 seconds)
## Iteration 2750: error is 0.172666 (50 iterations in 0.00 seconds)
## Iteration 2800: error is 0.146584 (50 iterations in 0.00 seconds)
## Iteration 2850: error is 0.113502 (50 iterations in 0.00 seconds)
## Iteration 2900: error is 0.095568 (50 iterations in 0.00 seconds)
## Iteration 2950: error is 0.108425 (50 iterations in 0.00 seconds)
## Iteration 3000: error is 0.107861 (50 iterations in 0.00 seconds)
## Fitting performed in 0.02 seconds.

embedding <- cbind(
    embedding,
    embedding_rtsne
) %>%
    dplyr::rename(
        x_tsne = "1",
        y_tsne = "2"
    )
p_embedding_tsne <- embedding %>%
    mutate(
        category = "t-SNE"
    ) %>%
    sample_frac() %>%
    plot_pca(
        x = x_tsne,
        y = y_tsne,
        color = sample_description,
        shape = cell_line
    ) +
    labs(x = "Dim 1", y = "Dim 2") +
    scale_color_manual(
        values = ggthemes::tableau_color_pal("Tableau 10")(
            length(unique(embedding$sample_description))
        )
    ) +
    scale_shape_manual(values = c(15))


Fig. 5A

p_embedding_pca1 +
    add_point_labels(
        x = x_pca,
        y = y_pca,
        z = title
    ) +
    p_embedding_tsne +
    add_point_labels(
        x = x_tsne,
        y = y_tsne,
        z = title
    ) +
    plot_annotation(theme = theme(plot.margin = margin())) +
    plot_layout(nrow = 1, 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"),
    )
}

Expression

Heatmap


FEATUES_SELECTED <- c(
    "ENSG00000075388_FGF4",
    "ENSG00000115112_TFCP2L1",
    "ENSG00000084093_REST",
    "ENSG00000134352_IL6ST",
    "ENSG00000108821_COL1A1",
    "ENSG00000148444_COMMD3",
    "ENSG00000116833_NR5A2",
    "ENSG00000111704_NANOG",
    "ENSG00000115414_FN1",
    "ENSG00000157404_KIT",
    "ENSG00000187682_ERAS",
    "ENSG00000174059_CD34",
    "ENSG00000115457_IGFBP2",
    "ENSG00000179059_ZFP42",
    "ENSG00000152670_DDX4",
    "ENSG00000113594_LIFR",
    "ENSG00000168036_CTNNB1",
    "ENSG00000241186_TDGF1",
    "ENSG00000181449_SOX2",
    "ENSG00000164362_TERT",
    "ENSG00000162992_NEUROD1",
    "ENSG00000010278_CD9",
    "ENSG00000101680_LAMA1",
    "ENSG00000184344_GDF3",
    "ENSG00000136574_GATA4",
    "ENSG00000168505_GBX2",
    "ENSG00000156574_NODAL",
    "ENSG00000141448_GATA6",
    "ENSG00000137270_GCM1",
    "ENSG00000179776_CDH5",
    "ENSG00000171794_UTF1",
    "ENSG00000091136_LAMB1",
    "ENSG00000175084_DES",
    "ENSG00000139219_COL2A1",
    "ENSG00000164458_TBXT",
    "ENSG00000125798_FOXA2",
    "ENSG00000164736_SOX17",
    "ENSG00000163508_EOMES",
    "ENSG00000141738_GRB7",
    "ENSG00000081051_AFP",
    "ENSG00000148200_NR6A1",
    "ENSG00000073792_IGF2BP2",
    "ENSG00000187140_FOXD3",
    "ENSG00000128567_PODXL",
    "ENSG00000102755_FLT1",
    "ENSG00000132688_NES",
    "ENSG00000159251_ACTC1",
    "ENSG00000075213_SEMA3A",
    "ENSG00000143320_CRABP2",
    "ENSG00000088305_DNMT3B",
    "ENSG00000145423_SFRP2",
    "ENSG00000069482_GAL"
)

SAMPLES_SELECTED <- c(
    "ERS537884", "ERS537881", "ERS537876", "ERS537888", "ERS537890", "ERS537878"
)


Fig. 5B

calc_cpm(matrix_readcount_use[, SAMPLES_SELECTED])[FEATUES_SELECTED, ] %>%
    as.matrix() %>%
    as.data.frame() %>%
    rownames_to_column(var = "feature") %>%
    pivot_longer(
        -c("feature"),
        names_to = "sample"
    ) %>%
    mutate(
        group = case_when(
            sample %in% c("ERS537884", "ERS537881", "ERS537876") ~ "H9_reset",
            !sample %in% c("ERS537884", "ERS537881", "ERS537876") ~ "H9"
        ),
        group = factor(
            group,
            levels = c("H9_reset", "H9")
        ),
        feature = factor(
            feature,
            levels = FEATUES_SELECTED %>% rev(.)
        ),
        sample = factor(
            sample,
            levels = SAMPLES_SELECTED
        )
    ) %>%
    plot_heatmap(
        x = sample,
        y = feature,
        z = log10(value + 1),
        y_order = rev(FEATUES_SELECTED)
    ) +
    facet_grid(~group, scales = "free", space = "free")

R session info

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-11
devtools::session_info()$pack %>%
    as_tibble() %>%
    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.0.0)
backports 1.1.8 2020-06-17 CRAN (R 4.0.1)
blob 1.2.1 2020-01-20 CRAN (R 4.0.0)
broom 0.7.0.9001 2020-08-09 Github (tidymodels/broom@a0bb105)
callr 3.4.3.9000 2020-07-31 Github (r-lib/callr@b96da8f)
cellranger 1.1.0 2016-07-27 CRAN (R 4.0.0)
checkmate 2.0.0 2020-02-06 CRAN (R 4.0.0)
cli 2.0.2 2020-02-28 CRAN (R 4.0.0)
colorspace 1.4-1 2019-03-18 CRAN (R 4.0.0)
crayon 1.3.4 2017-09-16 CRAN (R 4.0.0)
DBI 1.1.0 2019-12-15 CRAN (R 4.0.0)
dbplyr 1.4.4.9000 2020-07-28 Github (tidyverse/dbplyr@a6ed629)
desc 1.2.0 2018-05-01 CRAN (R 4.0.0)
devtools 2.3.1.9000 2020-07-31 Github (r-lib/devtools@df619ce)
digest 0.6.25 2020-02-23 CRAN (R 4.0.0)
dplyr 1.0.1.9001 2020-08-10 Github (tidyverse/dplyr@166aed1)
ellipsis 0.3.1.9000 2020-07-18 Github (r-lib/ellipsis@57a5071)
evaluate 0.14 2019-05-28 CRAN (R 4.0.0)
extrafont 0.17 2014-12-08 CRAN (R 4.0.2)
extrafontdb 1.0 2012-06-11 CRAN (R 4.0.0)
fansi 0.4.1 2020-01-08 CRAN (R 4.0.0)
farver 2.0.3 2020-01-16 CRAN (R 4.0.0)
forcats 0.5.0.9000 2020-05-28 Github (tidyverse/forcats@ab81d1b)
fs 1.5.0.9000 2020-08-03 Github (r-lib/fs@93e70a9)
generics 0.0.2 2018-11-29 CRAN (R 4.0.0)
ggplot2 3.3.2.9000 2020-08-04 Github (tidyverse/ggplot2@6d91349)
ggrepel 0.9.0 2020-07-24 Github (slowkow/ggrepel@4d0ef50)
ggthemes 4.2.0 2019-05-13 CRAN (R 4.0.0)
glue 1.4.1.9000 2020-07-07 Github (tidyverse/glue@205f18b)
gt 0.2.2 2020-08-06 Github (rstudio/gt@c97cb4c)
gtable 0.3.0 2019-03-25 CRAN (R 4.0.0)
haven 2.3.1 2020-06-01 CRAN (R 4.0.0)
hms 0.5.3 2020-01-08 CRAN (R 4.0.0)
htmltools 0.5.0 2020-06-16 CRAN (R 4.0.1)
httr 1.4.2 2020-07-20 CRAN (R 4.0.2)
jsonlite 1.7.0 2020-06-25 CRAN (R 4.0.2)
knitr 1.29 2020-06-23 CRAN (R 4.0.2)
labeling 0.3 2014-08-23 CRAN (R 4.0.0)
lattice 0.20-41 2020-04-02 CRAN (R 4.0.2)
lifecycle 0.2.0 2020-03-06 CRAN (R 4.0.0)
lubridate 1.7.9 2020-07-11 Github (tidyverse/lubridate@de2ee09)
magrittr 1.5.0.9000 2020-08-04 Github (tidyverse/magrittr@ba52096)
Matrix 1.2-18 2019-11-27 CRAN (R 4.0.2)
memoise 1.1.0 2017-04-21 CRAN (R 4.0.0)
modelr 0.1.8.9000 2020-05-19 Github (tidyverse/modelr@16168e0)
munsell 0.5.0 2018-06-12 CRAN (R 4.0.0)
patchwork 1.0.1.9000 2020-06-22 Github (thomasp85/patchwork@82a5e03)
pillar 1.4.6.9000 2020-07-21 Github (r-lib/pillar@8aef8f2)
pkgbuild 1.1.0.9000 2020-07-14 Github (r-lib/pkgbuild@3a87bd9)
pkgconfig 2.0.3 2019-09-22 CRAN (R 4.0.0)
pkgload 1.1.0 2020-05-29 CRAN (R 4.0.0)
prettyunits 1.1.1.9000 2020-08-10 Github (r-lib/prettyunits@b1cdad8)
processx 3.4.3 2020-07-05 CRAN (R 4.0.2)
ps 1.3.3 2020-05-08 CRAN (R 4.0.0)
purrr 0.3.4.9000 2020-08-10 Github (tidyverse/purrr@5de5ad2)
R6 2.4.1.9000 2020-07-18 Github (r-lib/R6@1415d11)
Rcpp 1.0.5 2020-07-06 CRAN (R 4.0.2)
readr 1.3.1.9000 2020-07-16 Github (tidyverse/readr@2ab51b2)
readxl 1.3.1.9000 2020-05-28 Github (tidyverse/readxl@3815961)
remotes 2.2.0.9000 2020-08-06 Github (r-lib/remotes@5a546ad)
reprex 0.3.0 2019-05-16 CRAN (R 4.0.0)
rlang 0.4.7.9000 2020-07-31 Github (r-lib/rlang@a144ac0)
rmarkdown 2.3.3 2020-07-25 Github (rstudio/rmarkdown@204aa41)
rprojroot 1.3-2 2018-01-03 CRAN (R 4.0.0)
rstudioapi 0.11.0-9000 2020-07-31 Github (rstudio/rstudioapi@aa17630)
Rtsne 0.16 2020-07-03 Github (jkrijthe/Rtsne@14b195f)
Rttf2pt1 1.3.8 2020-01-10 CRAN (R 4.0.0)
rvest 0.3.6 2020-07-25 CRAN (R 4.0.2)
sass 0.2.0 2020-03-18 CRAN (R 4.0.2)
scales 1.1.1.9000 2020-07-24 Github (r-lib/scales@9ff4757)
sessioninfo 1.1.1.9000 2020-07-18 Github (r-lib/sessioninfo@791705b)
stringi 1.4.6 2020-02-17 CRAN (R 4.0.0)
stringr 1.4.0.9000 2020-06-01 Github (tidyverse/stringr@f70c4ba)
styler 1.3.2.9000 2020-07-25 Github (r-lib/styler@16d815e)
testthat 2.99.0.9000 2020-07-28 Github (r-lib/testthat@0af11cd)
tibble 3.0.3.9000 2020-07-21 Github (tidyverse/tibble@b4eec19)
tidyr 1.1.1.9000 2020-07-31 Github (tidyverse/tidyr@61e9209)
tidyselect 1.1.0.9000 2020-07-11 Github (tidyverse/tidyselect@69fdc96)
tidyverse 1.3.0.9000 2020-06-01 Github (hadley/tidyverse@8a0bb99)
usethis 1.6.1.9001 2020-08-06 Github (r-lib/usethis@51fcdb8)
vctrs 0.3.2.9000 2020-08-04 Github (r-lib/vctrs@1b3cd7c)
viridisLite 0.3.0 2018-02-01 CRAN (R 4.0.0)
withr 2.2.0 2020-04-20 CRAN (R 4.0.0)
xfun 0.16 2020-07-24 CRAN (R 4.0.2)
xml2 1.3.2 2020-04-23 CRAN (R 4.0.0)
yaml 2.2.1 2020-02-01 CRAN (R 4.0.0)