Last updated: 2023-02-16
Checks: 6 1
Knit directory: scSeq_Hefendehl/
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.
The R Markdown is untracked by Git. To know which version of the R
Markdown file created these results, you’ll want to first commit it to
the Git repo. If you’re still working on the analysis, you can ignore
this warning. When you’re finished, you can run
wflow_publish to commit the R Markdown file and build the
HTML.
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(20220131) 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 b49ac8d. 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: .RData
Ignored: .Rproj.user/
Ignored: analysis/figure/
Ignored: data/20230203/
Ignored: data/Alignments/
Ignored: data/Cluster.markers_02-02-2023.xlsx
Ignored: data/DAM_genelists.RData
Ignored: data/ReloadAllData_Hefendehl_Stroke_Dec'21.RData
Ignored: data/Sample_Tables/
Ignored: data/Stroke-SS2_SCT-harmony_Hefendehl.html
Ignored: data/counts.csv
Ignored: data/genecounts.csv
Ignored: data/microglia-SCT_02-02-23.rds
Ignored: data/microglia_protein.rds
Ignored: data/samples.integrated.RData
Ignored: data/seu-SCT-harmony_02-02-23.rds
Ignored: data/seu_filtered_nonorm_02-02-23.rds
Ignored: data/tx2genes.csv
Untracked files:
Untracked: analysis/00.1_Original_Analysis_Integrated.Rmd
Unstaged changes:
Modified: _workflowr.yml
Modified: analysis/00_Original_Analysis.Rmd
Modified: data/README.md
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.
There are no past versions. Publish this analysis with
wflow_publish() to start tracking its development.
QC metrics from AG Hefendehl (Stroke)
Combined datasets and filter cells that have unique feature counts (gene number) over 7000 or less than 200 and cells with >5% mitochondrial counts.
# Visualize QC metrics as a violin plot
Idents(plates_hefendehl) <- "Plate"
VlnPlot(plates_hefendehl, features = c("nFeature_RNA", "nCount_RNA", "percent.mt","percent.rp"),
group.by = "Plate", pt.size = 1, ncol = 4)

SampleMeta=plates_hefendehl@meta.data
cormt<- cor(SampleMeta$nCount_RNA, SampleMeta$percent.mt, method="spearman")
corfeat<- cor(SampleMeta$nCount_RNA, SampleMeta$nFeature_RNA, method="spearman")
plot1 <- ggplot(plates_hefendehl@meta.data,aes(x=nCount_RNA, y=percent.mt, col=Plate))+
geom_point()+theme_classic()+geom_abline(slope = 0, intercept = 5)+labs(title=cormt)
plot2 <- ggplot(plates_hefendehl@meta.data,aes(x=nCount_RNA, y=nFeature_RNA, col=Plate))+geom_point()+theme_classic()+geom_abline(slope = 0, intercept = 7000)+
ggtitle(corfeat)
plot1 | plot2



PCA, tSNE and UMAP from the first 30 dimensions and with a resolution of 0.8
# Visualization
Idents(samples.integrated) <- "seurat_clusters"
DimPlot(samples.integrated, reduction = "umap", split.by = "Treatment")

p1<- DimPlot(samples.integrated, reduction = "umap", group.by = "Plate")
p1a<- DimPlot(samples.integrated, reduction = "umap", group.by = "Mouse_ID")
p1b<- DimPlot(samples.integrated, reduction = "umap", group.by = "Genotype_Treatment")
p1 + p1a + p1b

DimPlot(samples.integrated, group.by = "seurat_clusters", pt.size =1, label = T) + NoLegend()

DimPlot(samples.integrated, reduction = "umap", split.by = "Plate", pt.size= 1)

DimPlot(samples.integrated, reduction = "umap", split.by = "Genotype_Treatment", pt.size =1)

Cell cycle scoring
First, a score is assigned to each cell (Tirosh et al. 2016), based on its expression of G2/M and S phase markers. These markers should be anticorrelated in their expression levels and cells expression neither are likely not cycling and in G1 phase. Note: For downstream cell cylce regression the quantitative scores for G2/M and S phase are used, not the dicrete classification.


Cluster distribution
DimPlot(object = samples.integrated, pt.size = 1,reduction = "umap", group.by="Age",label = F) +
ggtitle("Cluster distribution according to Age") | DimPlot(object = samples.integrated, pt.size = 1,reduction = "umap", group.by="Genotype_Treatment",label = F) +
ggtitle("Cluster distribution according to Genotype + Treatment")

DimPlot(object = samples.integrated, pt.size = 1,reduction = "umap", group.by="Plate",label = F) +
ggtitle("Cluster distribution according to Plate") | DimPlot(object = samples.integrated, pt.size = 1,reduction = "umap", group.by = "seurat_clusters", label = T) +
ggtitle("Clustering")

Idents(samples.integrated) <- "seurat_clusters"
# use same colors for clusters as in plots
require(scales)
samples.integrated$seurat_clusters = factor(samples.integrated$seurat_clusters, levels=sort(as.character(unique(samples.integrated$seurat_clusters))))
identities <- levels(samples.integrated$seurat_clusters) # Create vector with levels of object@ident
cluster_colors <- hue_pal()(length(identities)) # Create vector of default ggplot2 colors
# number of cells in each cluster
cluster_nCell <- as.data.frame.matrix(table(samples.integrated$seurat_clusters,
samples.integrated$Genotype_Treatment))
cluster_nCell["Total" ,] = colSums(cluster_nCell)
cluster_nCell
APPPS1_Ctrl APPPS1_Stroke WT_Ctrl WT_Stroke
0 220 56 117 83
1 54 41 42 23
2 21 61 49 12
3 0 18 5 4
4 3 28 10 4
5 8 1 5 5
6 5 12 8 10
Total 311 217 236 141
# % of cells in each cluster , grouped by genotype_Age
cluster_per_Cell <- data.frame(table(samples.integrated$seurat_clusters,
samples.integrated$Age))
colnames(cluster_per_Cell) <- c("Cluster", "Age", "Frequency")
cluster_per_Cell
Cluster Age Frequency
1 0 37 weeks 295
2 1 37 weeks 100
3 2 37 weeks 83
4 3 37 weeks 15
5 4 37 weeks 14
6 5 37 weeks 8
7 6 37 weeks 18
8 0 38 weeks 49
9 1 38 weeks 11
10 2 38 weeks 16
11 3 38 weeks 3
12 4 38 weeks 3
13 5 38 weeks 4
14 6 38 weeks 4
15 0 40 weeks 132
16 1 40 weeks 49
17 2 40 weeks 44
18 3 40 weeks 9
19 4 40 weeks 28
20 5 40 weeks 7
21 6 40 weeks 13
cluster_percent_Cell <- data.frame(round((prop.table(x = table(samples.integrated$seurat_clusters,
samples.integrated$Age), margin = 2)*100),2))
colnames(cluster_percent_Cell) <- c("Cluster", "Age", "Frequency")
cluster_percent_Cell
Cluster Age Frequency
1 0 37 weeks 55.35
2 1 37 weeks 18.76
3 2 37 weeks 15.57
4 3 37 weeks 2.81
5 4 37 weeks 2.63
6 5 37 weeks 1.50
7 6 37 weeks 3.38
8 0 38 weeks 54.44
9 1 38 weeks 12.22
10 2 38 weeks 17.78
11 3 38 weeks 3.33
12 4 38 weeks 3.33
13 5 38 weeks 4.44
14 6 38 weeks 4.44
15 0 40 weeks 46.81
16 1 40 weeks 17.38
17 2 40 weeks 15.60
18 3 40 weeks 3.19
19 4 40 weeks 9.93
20 5 40 weeks 2.48
21 6 40 weeks 4.61
cluster_per_Treatment <- data.frame(table(samples.integrated$seurat_clusters,
samples.integrated$Genotype_Treatment))
colnames(cluster_per_Treatment) <- c("Cluster", "Genotype_Treatment", "Frequency")
cluster_per_Treatment
Cluster Genotype_Treatment Frequency
1 0 APPPS1_Ctrl 220
2 1 APPPS1_Ctrl 54
3 2 APPPS1_Ctrl 21
4 3 APPPS1_Ctrl 0
5 4 APPPS1_Ctrl 3
6 5 APPPS1_Ctrl 8
7 6 APPPS1_Ctrl 5
8 0 APPPS1_Stroke 56
9 1 APPPS1_Stroke 41
10 2 APPPS1_Stroke 61
11 3 APPPS1_Stroke 18
12 4 APPPS1_Stroke 28
13 5 APPPS1_Stroke 1
14 6 APPPS1_Stroke 12
15 0 WT_Ctrl 117
16 1 WT_Ctrl 42
17 2 WT_Ctrl 49
18 3 WT_Ctrl 5
19 4 WT_Ctrl 10
20 5 WT_Ctrl 5
21 6 WT_Ctrl 8
22 0 WT_Stroke 83
23 1 WT_Stroke 23
24 2 WT_Stroke 12
25 3 WT_Stroke 4
26 4 WT_Stroke 4
27 5 WT_Stroke 5
28 6 WT_Stroke 10
cluster_percent_Treatment <- data.frame(round((prop.table(x = table(samples.integrated$seurat_clusters,
samples.integrated$Genotype_Treatment), margin = 2)*100),2))
colnames(cluster_percent_Treatment) <- c("Cluster", "Genotype_Treatment", "Frequency")
cluster_percent_Treatment
Cluster Genotype_Treatment Frequency
1 0 APPPS1_Ctrl 70.74
2 1 APPPS1_Ctrl 17.36
3 2 APPPS1_Ctrl 6.75
4 3 APPPS1_Ctrl 0.00
5 4 APPPS1_Ctrl 0.96
6 5 APPPS1_Ctrl 2.57
7 6 APPPS1_Ctrl 1.61
8 0 APPPS1_Stroke 25.81
9 1 APPPS1_Stroke 18.89
10 2 APPPS1_Stroke 28.11
11 3 APPPS1_Stroke 8.29
12 4 APPPS1_Stroke 12.90
13 5 APPPS1_Stroke 0.46
14 6 APPPS1_Stroke 5.53
15 0 WT_Ctrl 49.58
16 1 WT_Ctrl 17.80
17 2 WT_Ctrl 20.76
18 3 WT_Ctrl 2.12
19 4 WT_Ctrl 4.24
20 5 WT_Ctrl 2.12
21 6 WT_Ctrl 3.39
22 0 WT_Stroke 58.87
23 1 WT_Stroke 16.31
24 2 WT_Stroke 8.51
25 3 WT_Stroke 2.84
26 4 WT_Stroke 2.84
27 5 WT_Stroke 3.55
28 6 WT_Stroke 7.09
# Grouped barchart of cell proportions
a1<- ggplot(cluster_percent_Cell, aes(fill=Age,
y=Frequency,
x=Cluster)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to Age [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=1)) +
xlab("")
# Grouped barchart of cell proportions
b1 <- ggplot(cluster_percent_Cell, aes(fill=Cluster, y=Frequency, x=Age)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to Age [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=1))
c1 <-ggplot(cluster_percent_Cell, aes(fill=Cluster, y=Frequency, x=Age)) +
geom_bar(position="stack", stat="identity")
a1 | b1 | c1

# Grouped barchart of cell proportions
a1<- ggplot(cluster_percent_Treatment, aes(fill=Genotype_Treatment,
y=Frequency,
x=Cluster)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to Genotype_Treatment [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=1)) +
xlab("")
# Grouped barchart of cell proportions
b1 <- ggplot(cluster_percent_Treatment, aes(fill=Cluster, y=Frequency, x=Genotype_Treatment)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to Genotype_Treatment [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=1))
c1 <-ggplot(cluster_percent_Treatment, aes(fill=Cluster, y=Frequency, x=Genotype_Treatment)) +
geom_bar(position="stack", stat="identity")
a1 | b1 | c1

Idents(samples.integrated) <- samples.integrated$seurat_clusters
markers <- FindAllMarkers(object = samples.integrated,
only.pos = TRUE,
logfc.threshold = 0.25)
DefaultAssay(samples.integrated) = "SCT"
markers %>%
group_by(cluster) %>%
top_n(n = 20, wt = avg_log2FC) -> top20
DoHeatmap(samples.integrated, features = top20$gene) + NoLegend() + ggtitle("Top20 cluster marker genes")

SingleR is an automatic annotation method for (scRNAseq) data (Aran et al. 2019). Given a reference dataset of samples (single-cell or bulk) with known labels, it labels new cells from a test dataset based on similarity to the reference set. Here we use the built-in references “Immgen” (830 microarray samples of sorted hematopoetic and immune cell populations) and “Mouse RNA-Seq” (358 non-specific mouse RNA-seq samples).
Immgen reference
MouseRNA-Seq reference Section Skipped as pred.mouseRNA object is not available
# number of cells in each cluster
cluster_nCell <- data.frame(table(samples.integrated$MouseRNASeq_sc_labels,samples.integrated$Genotype_Treatment))
colnames(cluster_nCell) <- c( "MouseRNASeq_sc_labels", "Genotype_Treatment","Number")
#cluster_nCell["Total" ,] = colSums(cluster_nCell)
# cluster_nCell
# % of cells in each cluster
cluster_percent_Cell <- data.frame(round((prop.table(x = table(samples.integrated$MouseRNASeq_sc_labels,
samples.integrated$Genotype_Treatment), margin = 2)*100),2))
colnames(cluster_percent_Cell) <- c("MouseRNASeq_sc_labels", "Genotype_Treatment", "Frequency")
# cluster_percent_Cell
# Grouped barchart of absolute cell numbers
ggplot(cluster_nCell, aes(fill=Genotype_Treatment, y=Number, x=MouseRNASeq_sc_labels)) +
geom_bar(position="dodge", stat="identity") +
ggtitle("Cell distribution according to MouseRNASeq reference (absolut values)") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=0.5)) +
xlab("")

# Grouped barchart of cell proportions
ggplot(cluster_percent_Cell, aes(fill=Genotype_Treatment, y=Frequency, x=MouseRNASeq_sc_labels)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to MouseRNASeq reference [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=0.5)) +
xlab("")

# number of cells in each cluster
cluster_nCell <- data.frame(table(samples.integrated$Immgen_sc_labels,samples.integrated$Genotype_Treatment))
colnames(cluster_nCell) <- c( "Immgen_sc_labels", "Genotype_Treatment","Number")
#cluster_nCell["Total" ,] = colSums(cluster_nCell)
# cluster_nCell
# % of cells in each cluster
cluster_percent_Cell <- data.frame(round((prop.table(x = table(samples.integrated$Immgen_sc_labels,
samples.integrated$Genotype_Treatment), margin = 2)*100),2))
colnames(cluster_percent_Cell) <- c( "Immgen_sc_labels", "Genotype_Treatment","Frequency")
# cluster_percent_Cell
# Grouped barchart of absolute cell numbers
ggplot(cluster_nCell, aes(fill=Genotype_Treatment, y=Number, x=Immgen_sc_labels)) +
geom_bar(position="dodge", stat="identity") +
ggtitle("Cell distribution according to Immgen reference (absolut values)") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=0.5)) +
xlab("")

# Grouped barchart of cell proportions
ggplot(cluster_percent_Cell, aes(fill=Genotype_Treatment, y=Frequency, x=Immgen_sc_labels)) +
geom_bar(position="dodge", stat="identity")+
ggtitle("Cell distribution according to Immgen reference [%]") +
theme(axis.text.x = element_text(angle = 45, hjust=1, vjust=0.5)) +
xlab("")
Renaming Clusters
DimPlot(samples.integrated, reduction = "umap", label=T) + NoLegend()

A second Seurat cluster is generated, where all non-microglial immune cells are removed according to the mouseRNASeq_sc_labels.
samples.microglia <- samples.integrated[,grepl("Microgli.*", samples.integrated$MouseRNASeq_cluster_labels)]
p3 <- DimPlot(samples.microglia, reduction = "umap", label=T, group.by = "MouseRNASeq_cluster_labels") + NoLegend()
p3a <- DimPlot(samples.microglia, reduction = "umap", label=T, group.by = "seurat_clusters") + NoLegend()
p3 + p3a

DAM plotting

DAM2_marker_gene_list <- list(Stage2_DAM_up)
samples.microglia <- AddModuleScore(object = samples.microglia,
features = DAM2_marker_gene_list, name = "DAM2_score")
p5 <- FeaturePlot(object = samples.microglia, features = "DAM2_score1")+scale_color_viridis_c()
Scale for colour is already present.
Adding another scale for colour, which will replace the existing scale.
p5a <- DimPlot(object = samples.microglia, reduction = "umap")
p5 | p5a

DAM 2 Markers
DAM2 upreagulated markers



DAM2 dowreagulated markers



Idents(samples.microglia) <- "Celltype"
DimPlot(samples.microglia, reduction = "umap", label = TRUE, pt.size = 1)+ NoLegend()

All enrichment tests were done with gprofiler 2
Tested Ontologies and Signatures GO:MF = Molecular Function GO:BP = Biological Processes GO:CC = Cellular Compartment), KEGG = pathways from KEGG Reactome, TF = regulatory motif matches from TRANSFAC HPA = tissue specificity from Human Protein Atlas; CORUM = protein complexes from CORUM HP = human disease phenotypes from Human Phenotype Ontology.
For more dteails see Website: https://biit.cs.ut.ee/gprofiler/gost”
log fold-change of the average expression between the two groups: Positive values indicate that the gene is more highly expressed in the target group (e.g. the APPPS1+ group)
WT vs App
WT vs MX04+ log fold-chage of the average expression between the two groups: Positive values indicate that the gene is more highly expressed in the Methoxy positive group
MX04+ vs MX04- in APPPS1 cohort only
WT_Ctrl vs WT_Stroke
APP_Ctrl vs APP_Stroke
WT_Ctrl vs APP_Ctrl
WT_Stroke vs APP_Stroke
log fold-chage of the average expression between the two groups: Positive values indicate that the gene is more highly expressed in the target group (e.g. Microglia 0) versus all others.
Microglia_0
Microglia_1
Microglia_2
Microglia_3
Microglia_4
Microglia_5
Idents(samples.microglia) <- "Genotype_Treatment"
mg1 <- samples.microglia[,samples.microglia$Celltype == "Microglia_1"]
mg1 <- PrepSCTFindMarkers(mg1)
Found 4 SCT models. Recorrecting SCT counts using minimum median counts: 86149.6040823294
mg1.markers.Genotype_Treatment <- FindAllMarkers(mg1)
Calculating cluster APPPS1_Stroke
Calculating cluster APPPS1_Ctrl
Calculating cluster WT_Stroke
Calculating cluster WT_Ctrl
mg1_top20 = mg1.markers.Genotype_Treatment %>% group_by(cluster) %>% top_n(n=20, wt=abs(avg_log2FC))
mg2 <- samples.microglia[,samples.microglia$Celltype == "Microglia_2"]
mg2 <- PrepSCTFindMarkers(mg2)
Found 4 SCT models. Recorrecting SCT counts using minimum median counts: 130791.604296882
mg2.markers.Genotype_Treatment <- FindAllMarkers(mg2)
Calculating cluster APPPS1_Stroke
Calculating cluster APPPS1_Ctrl
Calculating cluster WT_Stroke
Calculating cluster WT_Ctrl
mg2_top20 = mg2.markers.Genotype_Treatment %>% group_by(cluster) %>% top_n(n=20, wt=abs(avg_log2FC))
mg3 <- samples.microglia[,samples.microglia$Celltype == "Microglia_3"]
mg3 <- PrepSCTFindMarkers(mg3)
Found 4 SCT models. Recorrecting SCT counts using minimum median counts: 33475.3117257001
mg3.markers.Genotype_Treatment <- FindAllMarkers(mg3)
Calculating cluster APPPS1_Stroke
Calculating cluster APPPS1_Ctrl
Calculating cluster WT_Stroke
Calculating cluster WT_Ctrl
mg3_top20 = mg3.markers.Genotype_Treatment %>% group_by(cluster) %>% top_n(n=20, wt=abs(avg_log2FC))
mg4 <- samples.microglia[,samples.microglia$Celltype == "Microglia_4"]
mg4 <- PrepSCTFindMarkers(mg4)
Found 4 SCT models. Recorrecting SCT counts using minimum median counts: 1490
mg4.markers.Genotype_Treatment <- FindAllMarkers(mg4)
Calculating cluster APPPS1_Stroke
Calculating cluster APPPS1_Ctrl
Calculating cluster WT_Stroke
Calculating cluster WT_Ctrl
mg4_top20 = mg4.markers.Genotype_Treatment %>% group_by(cluster) %>% top_n(n=20, wt=abs(avg_log2FC))
mg5 <- samples.microglia[,samples.microglia$Celltype == "Microglia_5"]
mg5 <- PrepSCTFindMarkers(mg5)
Found 4 SCT models. Recorrecting SCT counts using minimum median counts: 101880.479534596
mg5.markers.Genotype_Treatment <- FindAllMarkers(mg5)
Calculating cluster APPPS1_Stroke
Calculating cluster APPPS1_Ctrl
Calculating cluster WT_Stroke
Calculating cluster WT_Ctrl
Warning: The following tests were not performed:
Warning: When testing APPPS1_Stroke versus all:
Cell group 1 has fewer than 3 cells
mg5_top20 = mg5.markers.Genotype_Treatment %>% group_by(cluster) %>% top_n(n=20, wt=abs(avg_log2FC))
Microglia_1

Microglia_2

Microglia_3

Microglia_4

Microglia_5

sessionInfo()
R version 4.2.2 (2022-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.1 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
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] scales_1.2.1 gprofiler2_0.2.1
[3] forcats_1.0.0 stringr_1.5.0
[5] dplyr_1.1.0 purrr_1.0.1
[7] readr_2.1.4 tidyr_1.3.0
[9] tibble_3.1.8 tidyverse_1.3.2
[11] pheatmap_1.0.12 EnhancedVolcano_1.16.0
[13] ggrepel_0.9.3 SingleR_2.0.0
[15] SummarizedExperiment_1.28.0 Biobase_2.58.0
[17] GenomicRanges_1.50.2 GenomeInfoDb_1.34.9
[19] IRanges_2.32.0 S4Vectors_0.36.1
[21] BiocGenerics_0.44.0 MatrixGenerics_1.10.0
[23] matrixStats_0.63.0 ggplot2_3.4.1
[25] SeuratObject_4.1.3 Seurat_4.3.0
[27] workflowr_1.7.0
loaded via a namespace (and not attached):
[1] utf8_1.2.3 spatstat.explore_3.0-6
[3] reticulate_1.28 tidyselect_1.2.0
[5] htmlwidgets_1.6.1 grid_4.2.2
[7] BiocParallel_1.32.5 Rtsne_0.16
[9] munsell_0.5.0 ScaledMatrix_1.6.0
[11] codetools_0.2-19 ica_1.0-3
[13] DT_0.27 future_1.31.0
[15] miniUI_0.1.1.1 withr_2.5.0
[17] spatstat.random_3.1-3 colorspace_2.1-0
[19] progressr_0.13.0 highr_0.10
[21] knitr_1.42 rstudioapi_0.14
[23] ROCR_1.0-11 tensor_1.5
[25] listenv_0.9.0 labeling_0.4.2
[27] git2r_0.31.0 GenomeInfoDbData_1.2.9
[29] polyclip_1.10-4 farver_2.1.1
[31] rprojroot_2.0.3 parallelly_1.34.0
[33] vctrs_0.5.2 generics_0.1.3
[35] xfun_0.37 timechange_0.2.0
[37] R6_2.5.1 ggbeeswarm_0.7.1
[39] rsvd_1.0.5 bitops_1.0-7
[41] spatstat.utils_3.0-1 cachem_1.0.6
[43] DelayedArray_0.24.0 assertthat_0.2.1
[45] promises_1.2.0.1 googlesheets4_1.0.1
[47] beeswarm_0.4.0 gtable_0.3.1
[49] beachmat_2.14.0 globals_0.16.2
[51] processx_3.8.0 goftest_1.2-3
[53] rlang_1.0.6 splines_4.2.2
[55] lazyeval_0.2.2 gargle_1.3.0
[57] spatstat.geom_3.0-6 broom_1.0.3
[59] yaml_2.3.7 reshape2_1.4.4
[61] abind_1.4-5 modelr_0.1.10
[63] crosstalk_1.2.0 backports_1.4.1
[65] httpuv_1.6.9 tools_4.2.2
[67] ellipsis_0.3.2 jquerylib_0.1.4
[69] RColorBrewer_1.1-3 ggridges_0.5.4
[71] Rcpp_1.0.10 plyr_1.8.8
[73] sparseMatrixStats_1.10.0 zlibbioc_1.44.0
[75] RCurl_1.98-1.10 ps_1.7.2
[77] deldir_1.0-6 pbapply_1.7-0
[79] cowplot_1.1.1 zoo_1.8-11
[81] haven_2.5.1 cluster_2.1.4
[83] fs_1.6.1 magrittr_2.0.3
[85] data.table_1.14.6 scattermore_0.8
[87] reprex_2.0.2 lmtest_0.9-40
[89] RANN_2.6.1 googledrive_2.0.0
[91] whisker_0.4.1 fitdistrplus_1.1-8
[93] hms_1.1.2 patchwork_1.1.2
[95] mime_0.12 evaluate_0.20
[97] xtable_1.8-4 readxl_1.4.2
[99] gridExtra_2.3 compiler_4.2.2
[101] crayon_1.5.2 KernSmooth_2.23-20
[103] htmltools_0.5.4 tzdb_0.3.0
[105] later_1.3.0 lubridate_1.9.2
[107] DBI_1.1.3 dbplyr_2.3.0
[109] MASS_7.3-58.2 Matrix_1.5-3
[111] cli_3.6.0 parallel_4.2.2
[113] igraph_1.4.0 pkgconfig_2.0.3
[115] getPass_0.2-2 sp_1.6-0
[117] plotly_4.10.1 spatstat.sparse_3.0-0
[119] xml2_1.3.3 vipor_0.4.5
[121] bslib_0.4.2 XVector_0.38.0
[123] rvest_1.0.3 callr_3.7.3
[125] digest_0.6.31 sctransform_0.3.5
[127] RcppAnnoy_0.0.20 spatstat.data_3.0-0
[129] rmarkdown_2.20 cellranger_1.1.0
[131] leiden_0.4.3 uwot_0.1.14
[133] DelayedMatrixStats_1.20.0 shiny_1.7.4
[135] lifecycle_1.0.3 nlme_3.1-162
[137] jsonlite_1.8.4 limma_3.54.1
[139] viridisLite_0.4.1 fansi_1.0.4
[141] pillar_1.8.1 lattice_0.20-45
[143] ggrastr_1.0.1 fastmap_1.1.0
[145] httr_1.4.4 survival_3.5-3
[147] glue_1.6.2 png_0.1-8
[149] stringi_1.7.12 sass_0.4.5
[151] BiocSingular_1.14.0 irlba_2.3.5.1
[153] future.apply_1.10.0