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.


Preprocessing

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

Perform integrated analysis

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

Cell type identification

Finding differentially expressed features (cluster biomarkers)

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

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()

Zoom into Microglia clusters

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

DAMs (Cell. 2017 Jun 15;169(7):1276-1290.e17. doi: 10.1016/j.cell.2017.05.018)

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

Renaming clusters

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

Signature enrichment

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”

DEGs and GSEA across microglia of different genotypes

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

DEGs and GSEA of microglia of different genotype and treatment

WT_Ctrl vs WT_Stroke

APP_Ctrl vs APP_Stroke

WT_Ctrl vs APP_Ctrl

WT_Stroke vs APP_Stroke

DEGs and GSEA of each cluster

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

Genotype + Treatment comparison in each cluster

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