Last updated: 2022-02-10
Checks: 7 0
Knit directory: MelanomaIMC/
This reproducible R Markdown analysis was created with workflowr (version 1.7.0). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20200728)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version a2860df. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .DS_Store
Ignored: .Rproj.user/
Ignored: Table_S4.csv
Ignored: analysis/.DS_Store
Ignored: analysis/._.DS_Store
Ignored: code/.DS_Store
Ignored: code/._.DS_Store
Ignored: data/.DS_Store
Ignored: data/._.DS_Store
Ignored: data/data_for_analysis/
Ignored: data/full_data/
Unstaged changes:
Modified: analysis/Figure_5.rmd
Modified: analysis/Supp-Figure_12.rmd
Modified: analysis/Supp-Figure_13.rmd
Modified: analysis/Supp-Figure_5.rmd
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/Summary_Statistics.rmd
) and HTML (docs/Summary_Statistics.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 3da15db | toobiwankenobi | 2021-11-24 | changes for revision |
Rmd | e9a4766 | toobiwankenobi | 2021-07-07 | adapt |
html | 4109ff1 | toobiwankenobi | 2021-07-07 | delete html files and adapt gitignore |
Rmd | 4affda4 | toobiwankenobi | 2021-04-14 | figure adaptations |
Rmd | ee1595d | toobiwankenobi | 2021-02-12 | clean repo and adapt files |
html | ee1595d | toobiwankenobi | 2021-02-12 | clean repo and adapt files |
Rmd | 2e443a5 | toobiwankenobi | 2021-02-09 | remove files that are not needed |
html | 3f5af3f | toobiwankenobi | 2021-02-09 | add .html files |
Rmd | afa7957 | toobiwankenobi | 2021-02-08 | minor changes on figures and figure order |
Rmd | f9bb33a | toobiwankenobi | 2021-02-04 | new Figure 5 and minor changes in figure order |
Rmd | 0c52285 | toobiwankenobi | 2021-01-12 | new summary stats |
Rmd | 2ac1833 | toobiwankenobi | 2021-01-08 | changes to Figures |
Rmd | 9442cb9 | toobiwankenobi | 2020-12-22 | add all new files |
This script gives an overview over the clinical data and generates statistics used in the manuscript.
sapply(list.files("code/helper_functions", full.names = TRUE), source)
code/helper_functions/calculateSummary.R
value ?
visible FALSE
code/helper_functions/censor_dat.R
value ?
visible FALSE
code/helper_functions/detect_mRNA_expression.R
value ?
visible FALSE
code/helper_functions/DistanceToClusterCenter.R
value ?
visible FALSE
code/helper_functions/findMilieu.R code/helper_functions/findPatch.R
value ? ?
visible FALSE FALSE
code/helper_functions/getInfoFromString.R
value ?
visible FALSE
code/helper_functions/getSpotnumber.R
value ?
visible FALSE
code/helper_functions/plotCellCounts.R
value ?
visible FALSE
code/helper_functions/plotCellFractions.R
value ?
visible FALSE
code/helper_functions/plotDist.R code/helper_functions/read_Data.R
value ? ?
visible FALSE FALSE
code/helper_functions/scatter_function.R
value ?
visible FALSE
code/helper_functions/sceChecks.R
value ?
visible FALSE
code/helper_functions/validityChecks.R
value ?
visible FALSE
library(data.table)
library(dplyr)
library(SingleCellExperiment)
library(readr)
# SCE object
sce_prot = readRDS(file = "data/data_for_analysis/sce_protein.rds")
sce_rna = readRDS(file = "data/data_for_analysis/sce_RNA.rds")
# image
image_mat_rna <- read.csv("data/data_for_analysis/rna/Image.csv")
image_mat_prot <- read.csv("data/data_for_analysis/protein/Image.csv")
# Number of Patients
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(PatientID) %>%
summarise(n=n())
n
1 69
# Number of Samples without control samples
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description) %>%
summarise(n=n())
n
1 159
# Number of Samples - Mutation
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description, .keep_all = T) %>%
group_by(Mutation) %>%
summarise(n=n()) %>%
mutate(percentage = round(n/sum(n) *100,0))
# A tibble: 6 × 3
Mutation n percentage
<chr> <int> <dbl>
1 BRAF 71 45
2 GNAQ 2 1
3 KRAS 1 1
4 NRAS 50 31
5 unknown 7 4
6 wt 28 18
# Number of Samples - Location
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description, .keep_all = T) %>%
group_by(MM_location_simplified) %>%
summarise(n=n()) %>%
mutate(percentage = round(n/sum(n) *100,0))
# A tibble: 3 × 3
MM_location_simplified n percentage
<chr> <int> <dbl>
1 LN 54 34
2 other 29 18
3 skin 76 48
# Number of Patients
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description, .keep_all = T) %>%
group_by(PatientID) %>%
summarise(n=n()) %>%
group_by(n) %>%
summarise(group_sizes = n())
# A tibble: 7 × 2
n group_sizes
<int> <int>
1 1 14
2 2 39
3 3 7
4 4 4
5 5 1
6 6 3
7 7 1
# Number Controls
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description, .keep_all = T) %>%
group_by(MM_location) %>%
summarise(n=n())
# A tibble: 11 × 2
MM_location n
<chr> <int>
1 brain 7
2 LN 49
3 LN or soft tissue 3
4 mucosal 4
5 parotis or LN 2
6 skin 4
7 skin_cutaneous 10
8 skin_subcutaneous 52
9 skin_undefine 10
10 soft tissue 9
11 visceral 9
# Number Controls
data.frame(colData(sce_prot)) %>%
filter(Location == "CTRL") %>%
distinct(Description, .keep_all = T) %>%
group_by(TissueType) %>%
summarise(n=n())
# A tibble: 3 × 2
TissueType n
<chr> <int>
1 Lymphnode 2
2 PSO 2
3 Skin 3
ncol(sce_rna)
[1] 864263
ncol(sce_prot)
[1] 989404
# diff in ablated area
area_prot <- data.frame(image_area = image_mat_prot$Height_FullStack * image_mat_prot$Width_FullStack)
area_prot$Description <- image_mat_prot$Metadata_Description
area_prot$data_set <- "Protein"
area_rna <- data.frame(image_area = image_mat_rna$Height_FullStack * image_mat_rna$Width_FullStack)
area_rna$Description <- image_mat_rna$Metadata_Description
area_rna$data_set <- "RNA"
image_area <- rbind(area_rna, area_prot)
# Ratio #Cells Protein/RNA
round(ncol(sce_prot) / ncol(sce_rna),2)
[1] 1.14
area <- image_area %>%
group_by(data_set) %>%
summarise(area_sum = sum(image_area))
# Ratio Area Protein/RNA
round(area[area$data_set == "Protein", ]$area_sum / area[area$data_set == "RNA", ]$area_sum,2)
[1] 1.07
# Protein data
data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage=round(n/sum(n)*100,1))
# A tibble: 11 × 3
celltype n percentage
<chr> <int> <dbl>
1 B cell 39632 4.1
2 BnT cell 25288 2.6
3 CD4+ T cell 54188 5.6
4 CD8+ T cell 52622 5.5
5 FOXP3+ T cell 9286 1
6 Macrophage 62120 6.5
7 Neutrophil 11081 1.2
8 pDC 6693 0.7
9 Stroma 59455 6.2
10 Tumor 622146 64.7
11 unknown 18839 2
# RNA data
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage=round(n/sum(n)*100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 10931 1.3
2 CD8- T cell 87858 10.5
3 CD8+ T cell 44630 5.3
4 HLA-DR 29557 3.5
5 Macrophage 64405 7.7
6 Neutrophil 5018 0.6
7 Stroma 24574 2.9
8 Tumor 549153 65.3
9 unknown 2972 0.4
10 Vasculature 21297 2.5
# Percentage of Chemokine Producing Cells
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
group_by(chemokine) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
chemokine n percentage
<lgl> <int> <dbl>
1 FALSE 782417 93.1
2 TRUE 57978 6.9
# Chemokines by Celltype
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(chemokine == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 920 1.6
2 CD8- T cell 12179 21
3 CD8+ T cell 9428 16.3
4 HLA-DR 3202 5.5
5 Macrophage 12675 21.9
6 Neutrophil 1378 2.4
7 Stroma 3913 6.7
8 Tumor 12965 22.4
9 unknown 45 0.1
10 Vasculature 1273 2.2
# Sum of major expressing cell types
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(chemokine == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1)) %>%
filter(percentage > 15) %>%
summarise(sum <- sum(percentage))
# A tibble: 1 × 1
`sum <- sum(percentage)`
<dbl>
1 81.6
# CXCL13 experssion by Tcells
# Chemokines by Celltype
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(expressor == "CXCL13") %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1)) %>%
filter(percentage > 30) %>%
summarise(sum <- sum(percentage))
# A tibble: 1 × 1
`sum <- sum(percentage)`
<dbl>
1 71.1
data.frame(colData(sce_rna)) %>%
rowwise() %>%
mutate(number_of_chemokines = length(strsplit(expressor, "_")[[1]])) %>%
filter(Location != "CTRL") %>%
filter(chemokine == 1) %>%
group_by(number_of_chemokines) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 8 × 3
number_of_chemokines n percentage
<int> <int> <dbl>
1 1 45687 78.8
2 2 9479 16.3
3 3 2152 3.7
4 4 518 0.9
5 5 109 0.2
6 6 22 0
7 7 8 0
8 8 3 0
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(CCL8 == 1) %>%
summarise(n=n())
n
1 862
# Percentage of Tumor Cells that Express a Chemokine
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(celltype == "Tumor") %>%
group_by(chemokine) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
chemokine n percentage
<lgl> <int> <dbl>
1 FALSE 536188 97.6
2 TRUE 12965 2.4
# CXCL10 in Tumor cells
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(CXCL10 == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 71 0.6
2 CD8- T cell 1275 10.7
3 CD8+ T cell 1364 11.4
4 HLA-DR 332 2.8
5 Macrophage 3624 30.3
6 Neutrophil 166 1.4
7 Stroma 212 1.8
8 Tumor 4778 40
9 unknown 3 0
10 Vasculature 117 1
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(celltype == "Tumor") %>%
group_by(CXCL10) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
CXCL10 n percentage
<dbl> <int> <dbl>
1 0 544375 99.1
2 1 4778 0.9
# CCL2 in Tumor cells
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(CCL2 == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 270 2.7
2 CD8- T cell 1198 11.9
3 CD8+ T cell 768 7.7
4 HLA-DR 327 3.3
5 Macrophage 3041 30.3
6 Neutrophil 89 0.9
7 Stroma 1182 11.8
8 Tumor 2872 28.6
9 unknown 7 0.1
10 Vasculature 282 2.8
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(celltype == "Tumor") %>%
group_by(CCL2) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
CCL2 n percentage
<dbl> <int> <dbl>
1 0 546281 99.5
2 1 2872 0.5
# CXCL8 in Tumor cells
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(CXCL8 == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 18 0.4
2 CD8- T cell 133 3.1
3 CD8+ T cell 95 2.2
4 HLA-DR 53 1.2
5 Macrophage 641 14.8
6 Neutrophil 1058 24.4
7 Stroma 69 1.6
8 Tumor 2214 51
9 unknown 13 0.3
10 Vasculature 46 1.1
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(celltype == "Tumor") %>%
group_by(CXCL8) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
CXCL8 n percentage
<dbl> <int> <dbl>
1 0 546939 99.6
2 1 2214 0.4
# CXCL12 in Tumor cells
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(CXCL12 == 1) %>%
group_by(celltype) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 10 × 3
celltype n percentage
<chr> <int> <dbl>
1 CD38 340 4.3
2 CD8- T cell 1445 18.3
3 CD8+ T cell 681 8.6
4 HLA-DR 255 3.2
5 Macrophage 1287 16.3
6 Neutrophil 14 0.2
7 Stroma 2373 30
8 Tumor 1060 13.4
9 unknown 3 0
10 Vasculature 453 5.7
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
filter(celltype == "Tumor") %>%
group_by(CXCL12) %>%
summarise(n=n()) %>%
mutate(percentage = round((n / sum(n)) *100,1))
# A tibble: 2 × 3
CXCL12 n percentage
<dbl> <int> <dbl>
1 0 548093 99.8
2 1 1060 0.2
# overall chemokine expression
data.frame(colData(sce_rna)) %>%
filter(Location == "CTRL") %>%
group_by(chemokine, TissueType) %>%
summarise(n=n()) %>%
reshape2::dcast(TissueType ~ chemokine, value.var = "n", fill = 0) %>%
mutate(percentage_expressing = round(`TRUE` / (`FALSE`+`TRUE`) * 100,1))
TissueType FALSE TRUE percentage_expressing
1 Lymphnode 16949 1001 5.6
2 PSO 2524 264 9.5
3 Skin 3097 33 1.1
# CXCL13 expression in control samples
data.frame(colData(sce_rna)) %>%
filter(Location == "CTRL") %>%
group_by(CXCL13, TissueType) %>%
summarise(n=n()) %>%
reshape2::dcast(TissueType ~ CXCL13, value.var = "n", fill = 0) %>%
mutate(percentage_expressing = round(`1` / (`0`+`1`) * 100,1))
TissueType 0 1 percentage_expressing
1 Lymphnode 17316 634 3.5
2 PSO 2787 1 0.0
3 Skin 3130 0 0.0
# CXCL13 expression in tumor samples
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
group_by(CXCL13, MM_location) %>%
summarise(n=n()) %>%
reshape2::dcast(MM_location ~ CXCL13, value.var = "n", fill = 0) %>%
mutate(percentage_expressing = round(`1` / (`0`+`1`) * 100,1))
MM_location 0 1 percentage_expressing
1 brain 28923 922 3.1
2 LN 288382 5157 1.8
3 LN or soft tissue 21060 148 0.7
4 mucosal 20428 34 0.2
5 parotis or LN 12698 23 0.2
6 skin 9656 72 0.7
7 skin_cutaneous 64397 74 0.1
8 skin_subcutaneous 268021 1582 0.6
9 skin_undefine 38163 508 1.3
10 soft tissue 38483 159 0.4
11 visceral 41479 26 0.1
# CXCL10 expression in control samples
data.frame(colData(sce_rna)) %>%
filter(Location == "CTRL") %>%
group_by(CXCL10, TissueType) %>%
summarise(n=n()) %>%
reshape2::dcast(TissueType ~ CXCL10, value.var = "n", fill = 0) %>%
mutate(percentage_expressing = round(`1` / (`0`+`1`) * 100,1))
TissueType 0 1 percentage_expressing
1 Lymphnode 17916 34 0.2
2 PSO 2782 6 0.2
3 Skin 3130 0 0.0
# CXCL10 expression in tumor samples
data.frame(colData(sce_rna)) %>%
filter(Location != "CTRL") %>%
group_by(CXCL10, MM_location) %>%
summarise(n=n()) %>%
reshape2::dcast(MM_location ~ CXCL10, value.var = "n", fill = 0) %>%
mutate(percentage_expressing = round(`1` / (`0`+`1`) * 100,1))
MM_location 0 1 percentage_expressing
1 brain 29336 509 1.7
2 LN 289761 3778 1.3
3 LN or soft tissue 20929 279 1.3
4 mucosal 20405 57 0.3
5 parotis or LN 12714 7 0.1
6 skin 9681 47 0.5
7 skin_cutaneous 64227 244 0.4
8 skin_subcutaneous 264588 5015 1.9
9 skin_undefine 36915 1756 4.5
10 soft tissue 38399 243 0.6
11 visceral 41498 7 0.0
# no control samples
cont_table <- data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL") %>%
distinct(Description,.keep_all = T) %>%
filter(is.na(dysfunction_score) == FALSE) %>%
group_by(bcell_patch_score, dysfunction_score) %>%
summarise(n=n()) %>%
filter(bcell_patch_score %in% c("Small B cell Patches", "B cell Follicles")) %>%
reshape2::dcast(bcell_patch_score ~ dysfunction_score, value.var = "n", fill = 0)
fisher.test(cont_table[,-1])
Fisher's Exact Test for Count Data
data: cont_table[, -1]
p-value = 0.01522
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.310455 1242.440939
sample estimates:
odds ratio
18.80249
# no LN samples
cont_table <- data.frame(colData(sce_prot)) %>%
filter(Location != "CTRL" & MM_location_simplified != "LN") %>%
distinct(Description,.keep_all = T) %>%
filter(is.na(dysfunction_score) == FALSE) %>%
group_by(bcell_patch_score, dysfunction_score) %>%
summarise(n=n()) %>%
filter(bcell_patch_score %in% c("Small B cell Patches", "B cell Follicles")) %>%
reshape2::dcast(bcell_patch_score ~ dysfunction_score, value.var = "n", fill = 0)
fisher.test(cont_table[,-1])
Fisher's Exact Test for Count Data
data: cont_table[, -1]
p-value = 0.1667
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.2538029 Inf
sample estimates:
odds ratio
Inf
sessionInfo()
R version 4.1.2 (2021-11-01)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.3 LTS
Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.8.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats4 stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] readr_2.1.2 SingleCellExperiment_1.16.0
[3] SummarizedExperiment_1.24.0 Biobase_2.54.0
[5] GenomicRanges_1.46.1 GenomeInfoDb_1.30.1
[7] IRanges_2.28.0 S4Vectors_0.32.3
[9] BiocGenerics_0.40.0 MatrixGenerics_1.6.0
[11] matrixStats_0.61.0 data.table_1.14.2
[13] dplyr_1.0.7 workflowr_1.7.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.8 lattice_0.20-45 getPass_0.2-2
[4] ps_1.6.0 assertthat_0.2.1 rprojroot_2.0.2
[7] digest_0.6.29 utf8_1.2.2 plyr_1.8.6
[10] R6_2.5.1 evaluate_0.14 httr_1.4.2
[13] pillar_1.7.0 zlibbioc_1.40.0 rlang_1.0.0
[16] rstudioapi_0.13 whisker_0.4 callr_3.7.0
[19] jquerylib_0.1.4 Matrix_1.4-0 rmarkdown_2.11
[22] stringr_1.4.0 RCurl_1.98-1.5 DelayedArray_0.20.0
[25] compiler_4.1.2 httpuv_1.6.5 xfun_0.29
[28] pkgconfig_2.0.3 htmltools_0.5.2 tidyselect_1.1.1
[31] tibble_3.1.6 GenomeInfoDbData_1.2.7 fansi_1.0.2
[34] tzdb_0.2.0 crayon_1.4.2 later_1.3.0
[37] bitops_1.0-7 grid_4.1.2 jsonlite_1.7.3
[40] lifecycle_1.0.1 DBI_1.1.2 git2r_0.29.0
[43] magrittr_2.0.2 cli_3.1.1 stringi_1.7.6
[46] reshape2_1.4.4 XVector_0.34.0 fs_1.5.2
[49] promises_1.2.0.1 bslib_0.3.1 ellipsis_0.3.2
[52] generics_0.1.2 vctrs_0.3.8 tools_4.1.2
[55] glue_1.6.1 purrr_0.3.4 hms_1.1.1
[58] processx_3.5.2 fastmap_1.1.0 yaml_2.2.2
[61] knitr_1.37 sass_0.4.0