stuart-lab / signac

R toolkit for the analysis of single-cell chromatin data
https://stuartlab.org/signac/
Other
328 stars 88 forks source link

Problem with FindMotifs (MatchRegionStats) #1378

Closed mossconfuse closed 1 year ago

mossconfuse commented 1 year ago

I have a merged Seurat object (6 samples) of multiome (GEx and ATAC) data:

An object of class Seurat 
171105 features across 11666 samples within 4 assays 
Active assay: peaks (88220 features, 88220 variable features)
 2 layers present: counts, data
 3 other assays present: RNA, ATAC, SCT
 7 dimensional reductions calculated: pca, sct_harmony, sct_harmony_UMAP, lsi, lsi_harmony, umap.atac, wnn.umap

I am following the vignette for chromVAR, with my own working BSgenome and a JASPAR2022 position frequency matrix for plants. Everything seems to work (Addmotifs, FindMarkers, AccessiblePeaks, RegionStats), but I get an error with FindMotifs:

Selecting background regions to match input sequence characteristics
Error in MatchRegionStats(meta.feature = mf.choose, query.feature = mf.query,  : 
  meta.feature should be a data.frame

When I run:

> GetAssayData(
+       object = mySeurat,
+       assay = assay,
+       slot = "meta.features"
+     )                              
88220 x 11666 sparse Matrix of class "dgCMatrix"
  [[ suppressing 26 column names ‘Wt_T00_AAACATGCATAATCGT-1’, ‘Wt_T00_AAACATGCATCATGTG-1’, ‘Wt_T00_AAACCAACATTAGCGC-1’ ... ]]
  [[ suppressing 26 column names ‘Wt_T00_AAACATGCATAATCGT-1’, ‘Wt_T00_AAACATGCATCATGTG-1’, ‘Wt_T00_AAACCAACATTAGCGC-1’ ... ]]

Chr01-1526-1956   .         .         . .         .         .        
Chr01-2409-3206   .         .         . .         .         .        

is seems meta.feature is a dgCMatrix instead of dataframe.

I tried to mess with FindMotifs by copying the function and changing the meta.feature to

    meta.feature <- as.data.frame(GetAssayData(
      object = object,
      assay = assay,
      slot = "meta.features"
    ))

but now get

> enriched.motifs <- FindMotifs2(
+   object = mySeurat,
+   features = top.da.peak
+   #background = peaks.matched
+ )
Selecting background regions to match input sequence characteristics
Warning: sparse->dense coercion: allocating vector of size 7.7 GiBError in MatchRegionStats(meta.feature = mf.choose, query.feature = mf.query,  : 
  GC.percent not present in meta.features. Run RegionStats to compute GC.percent for each feature.

But I don't know why:

> mySeurat@assays$peaks@meta.features$GC.percent
   [1] 38.97912 35.46366 47.23549 45.23810 50.60034 41.06754
   [7] 49.53560 49.56522 51.72982 48.82629 51.92108 45.76271
  [13] 46.10459 50.13649 44.18345 56.59164 47.39583 56.54649
  [19] 38.50889 50.82327 32.01220 30.43478 46.58945 50.06002

I don't know how to proceed from here. I suspect brute-forcing as.data.frame() was not a solution.

timoast commented 1 year ago

Can you show the full code you're using and output of sessionInfo()?

mossconfuse commented 1 year ago
pacman::p_load(
  'devtools',
  'tidyverse',
  'Seurat',
  'SeuratObject',
  'Signac',
  'GenomicRanges',
  'BiocManager',
  'BiocInstaller',
  'chromVAR',
  'BSgenome.Ppatens.v3.3',
  'JASPAR2022',
  'TFBSTools',
  'motifmatchr'
) 

load("Saved RObjects/PreprocessedSeuratImage2.RData") #I generate my Seurat object on our campus server but import it here. I can produce coveragePlots and WNN UMAPS without hassle

pfm <- getMatrixSet(
  x = JASPAR2022,
  opts = list(collection = "CORE", tax_group = 'plants', all_versions = FALSE)
)

mySeurat <- AddMotifs(
  object = mySeurat,
  genome = BSgenome.Ppatens.v3.3,
  pfm = pfm
)

DefaultAssay(mySeurat) <- "peaks"

mySeurat <- RegionStats(mySeurat, genome = BSgenome.Ppatens.v3.3)

da_peaks <- FindMarkers(
  object = mySeurat,
  ident.1 = c('1','3'),
  only.pos = TRUE,
  test.use = 'LR',
  min.pct = 0.05,
  latent.vars = 'nCount_peaks'
)
top.da.peak <- rownames(da_peaks[da_peaks$p_val < 0.005, ])

enriched.motifs <- FindMotifs(
  object = mySeurat,
  features = top.da.peak
  #background = peaks.matched
)

And the sessionInfo():

> sessionInfo()
R version 4.2.2 (2022-10-31)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.2.1

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] motifmatchr_1.20.0          TFBSTools_1.36.0            JASPAR2022_0.99.7           BiocFileCache_2.6.1        
 [5] dbplyr_2.3.2                BSgenome.Ppatens.v3.3_1.0.0 BSgenome_1.66.3             rtracklayer_1.58.0         
 [9] Biostrings_2.66.0           XVector_0.38.0              chromVAR_1.20.2             BiocInstaller_1.12.1       
[13] BiocManager_1.30.20         GenomicRanges_1.50.2        GenomeInfoDb_1.34.9         IRanges_2.32.0             
[17] S4Vectors_0.36.2            BiocGenerics_0.44.0         Signac_1.9.0                Seurat_4.9.9.9041          
[21] SeuratObject_4.9.9.9083     sp_1.6-0                    lubridate_1.9.2             forcats_1.0.0              
[25] stringr_1.5.0               dplyr_1.1.1                 purrr_1.0.1                 readr_2.1.4                
[29] tidyr_1.3.0                 tibble_3.2.1                ggplot2_3.4.2               tidyverse_2.0.0            
[33] devtools_2.4.5              usethis_2.1.6              

loaded via a namespace (and not attached):
  [1] pacman_0.5.1                utf8_1.2.3                  R.utils_2.12.2              spatstat.explore_3.1-0     
  [5] reticulate_1.28             tidyselect_1.2.0            AnnotationDbi_1.60.2        poweRlaw_0.70.6            
  [9] RSQLite_2.3.1               htmlwidgets_1.6.2           grid_4.2.2                  BiocParallel_1.32.6        
 [13] Rtsne_0.16                  munsell_0.5.0               codetools_0.2-19            ica_1.0-3                  
 [17] DT_0.27                     future_1.32.0               miniUI_0.1.1.1              withr_2.5.0                
 [21] spatstat.random_3.1-4       colorspace_2.1-0            progressr_0.13.0            filelock_1.0.2             
 [25] Biobase_2.58.0              knitr_1.42                  rstudioapi_0.14             ROCR_1.0-11                
 [29] tensor_1.5                  listenv_0.9.0               labeling_0.4.2              MatrixGenerics_1.10.0      
 [33] GenomeInfoDbData_1.2.9      harmony_0.1.1               polyclip_1.10-4             farver_2.1.1               
 [37] bit64_4.0.5                 parallelly_1.35.0           vctrs_0.6.1                 generics_0.1.3             
 [41] xfun_0.38                   timechange_0.2.0            R6_2.5.1                    bitops_1.0-7               
 [45] spatstat.utils_3.0-2        cachem_1.0.7                DelayedArray_0.24.0         BiocIO_1.8.0               
 [49] promises_1.2.0.1            scales_1.2.1                gtable_0.3.3                globals_0.16.2             
 [53] processx_3.8.0              goftest_1.2-3               spam_2.9-1                  seqLogo_1.64.0             
 [57] rlang_1.1.0                 RcppRoll_0.3.0              splines_4.2.2               lazyeval_0.2.2             
 [61] spatstat.geom_3.1-0         yaml_2.3.7                  reshape2_1.4.4              abind_1.4-5                
 [65] httpuv_1.6.9                tools_4.2.2                 ellipsis_0.3.2              RColorBrewer_1.1-3         
 [69] sessioninfo_1.2.2           ggridges_0.5.4              Rcpp_1.0.10                 plyr_1.8.8                 
 [73] zlibbioc_1.44.0             RCurl_1.98-1.12             ps_1.7.4                    prettyunits_1.1.1          
 [77] deldir_1.0-6                pbapply_1.7-0               cowplot_1.1.1               urlchecker_1.0.1           
 [81] zoo_1.8-12                  SummarizedExperiment_1.28.0 ggrepel_0.9.3               cluster_2.1.4              
 [85] fs_1.6.1                    magrittr_2.0.3              data.table_1.14.8           RSpectra_0.16-1            
 [89] scattermore_0.8             lmtest_0.9-40               RANN_2.6.1                  fitdistrplus_1.1-8         
 [93] matrixStats_0.63.0          pkgload_1.3.2               hms_1.1.3                   patchwork_1.1.2            
 [97] mime_0.12                   evaluate_0.20               xtable_1.8-4                XML_3.99-0.14              
[101] fastDummies_1.6.3           gridExtra_2.3               compiler_4.2.2              KernSmooth_2.23-20         
[105] crayon_1.5.2                R.oo_1.25.0                 htmltools_0.5.5             later_1.3.0                
[109] tzdb_0.3.0                  DBI_1.1.3                   rappdirs_0.3.3              MASS_7.3-58.3              
[113] Matrix_1.5-4                cli_3.6.1                   R.methodsS3_1.8.2           parallel_4.2.2             
[117] dotCall64_1.0-2             igraph_1.4.2                pkgconfig_2.0.3             TFMPvalue_0.0.9            
[121] GenomicAlignments_1.34.1    plotly_4.10.1               spatstat.sparse_3.0-1       annotate_1.76.0            
[125] DirichletMultinomial_1.40.0 callr_3.7.3                 digest_0.6.31               pracma_2.4.2               
[129] sctransform_0.3.5           RcppAnnoy_0.0.20            CNEr_1.34.0                 spatstat.data_3.0-1        
[133] rmarkdown_2.21              leiden_0.4.3                fastmatch_1.1-3             uwot_0.1.14                
[137] curl_5.0.0                  restfulr_0.0.15             gtools_3.9.4                shiny_1.7.4                
[141] Rsamtools_2.14.0            rjson_0.2.21                lifecycle_1.0.3             nlme_3.1-162               
[145] jsonlite_1.8.4              viridisLite_0.4.1           fansi_1.0.4                 pillar_1.9.0               
[149] lattice_0.21-8              GO.db_3.16.0                KEGGREST_1.38.0             fastmap_1.1.1              
[153] httr_1.4.5                  pkgbuild_1.4.0              survival_3.5-5              glue_1.6.2                 
[157] remotes_2.4.2               png_0.1-8                   bit_4.0.5                   stringi_1.7.12             
[161] profvis_0.3.7               blob_1.2.4                  RcppHNSW_0.4.1              caTools_1.18.2             
[165] memoise_2.0.1               irlba_2.3.5.1               future.apply_1.10.0        

I can also show the R script I used to generate the Seurat object on our server, but it's a lot:


saveName <- "PreprocessedSeurat"

requiredPackages <- c(
  'BSgenome.Ppatens.v3.3',
  'tidyverse',
  'Seurat',
  'SeuratDisk',
  'SeuratData',
  'Signac',
  'SeuratObject',
  'rtracklayer',
  'hdf5r',
  'ggplot2',
  'AnnotationFilter',
  'harmony',
  'BiocGenerics',
  'GenomeInfoDb',
  'GenomicFeatures',
  'GenomicRanges',
  'IRanges',
  'Rsamtools',
  'S4Vectors',
  'TFBSTools',
  'ggbio',
  'motifmatchr',
  'AnnotationDbi',
  'R.utils',
  'qlcMatrix',
  'devtools',
  'data.table',
  'presto'
)
setRepositories(ind=1:3)
for (packet in requiredPackages)
{
    if (!require(packet, character.only = T)) install.packages(packet, repos="http://cran.us.r-project.org",lib="/mnt/gpfsA/home/devil/R_packages")
    print(warnings())
}
rm(packet, requiredPackages)

#######################################################
#  Load Annotation
#######################################################

tryCatch( gtf <- rtracklayer::import('/pathTo/reference/Ppatens_v3-3/genes/genes.gtf'),
    error = function(e) { gtf <- rtracklayer::import(gunzip('/pathTo/reference/Ppatens_v3-3/genes/genes.gtf.gz', remove = F))}
        )

gene.coords <- gtf
head(gene.coords,20)

gene.coords$gene_biotype <- "protein_coding"
gene.coords$gene_id <- str_replace_all(gene.coords$gene_id, "_", "-")
gene.coords$gene_name <- str_replace_all(gene.coords$gene_id, "_", "-")
gene.coords$tx_id <- gene.coords$transcript_id

gene.coords <- setNames(gene.coords, gene.coords$gene_id)
genome(gene.coords) <- "Assembly v3.3"
cds <- gene.coords[gene.coords$type == 'CDS']
cds$type <- "cds"
utr <- gene.coords[gene.coords$type %>% str_detect("utr")]
utr$type <- "utr"
annotation <- c(gene.coords[gene.coords$type == 'gene'], gene.coords[gene.coords$type == 'exon'], cds, utr)

rm(gtf,gene.coords, cds, utr)

#######################################################
#  Create Seurat
#######################################################

experiment = c("Wt_T00","Wt_T06","Wt_T12","ste_T00","ste_T06","ste_T12")
inputdata <-Read10X_h5
mySeurat <- CreateSeuratObject

for(sample in experiment){

    print(paste0("/myPath/runCellRanger-arc_Count_2022_12_26",sample,"/outs/filtered_feature_bc_matrix.h5"))

  inputdata <- Read10X_h5(paste0("/myPath/runCellRanger-arc_Count_2022_12_26",sample,"/outs/filtered_feature_bc_matrix.h5"))

  # extract RNA and ATAC data
  rna_counts <- inputdata$`Gene Expression`
  atac_counts <- inputdata$Peaks

  # Create Seurat object (P. patens single nuclei)
  sample_seurat <- CreateSeuratObject(counts = rna_counts, project = sample)
  sample_seurat[["percent.mt"]] <- PercentageFeatureSet(sample_seurat, pattern = "^MT-")

  # Add the ATAC-seq data
  # we'll only use peaks in standard chromosomes
  grange.counts <- StringToGRanges(rownames(atac_counts), sep = c(":", "-"))
  grange.use <- seqnames(grange.counts) %in% standardChromosomes(grange.counts)
  atac_counts <- atac_counts[as.vector(grange.use), ]

  frag.file <- paste0("/myPath/runCellRanger-arc_Count_2022_12_26",sample,"/outs/atac_fragments.tsv.gz")

sample_seurat[["ATAC"]] <- CreateChromatinAssay(
   counts = atac_counts,
   sep = c(":", "-"),
   fragments = frag.file,
   min.cells = 10,
   annotation = annotation
 )

  assign(paste0(sample,"_seurat"), sample_seurat)
  rm(rna_counts, atac_counts, grange.counts, grange.use, frag.file, inputdata, sample_seurat)
}

 mySeurat <- merge(Wt_T00_seurat, y = c(Wt_T06_seurat, Wt_T12_seurat, ste_T00_seurat, ste_T06_seurat, ste_T12_seurat), add.cell.ids = experiment, project = "mySeurat")

   rm(list=ls(pattern = '_seurat$'))

#######################################################
#  New Metadata
#######################################################
mySeurat$genotype <-mySeurat$orig.ident |> str_split("_", simplify = T) %>% .[,1]
mySeurat$genotype <- str_replace_all(mySeurat$genotype, "ste", "stemin\u394")
mySeurat$genotype <- str_replace_all(mySeurat$genotype, "Wt", "wild type")
mySeurat$time <- mySeurat$orig.ident |> str_split("_", simplify = T) %>% .[,2] %>% str_remove("T") %>% as.numeric()

#######################################################
#  TSS Enrichment
#######################################################

DefaultAssay(mySeurat) <- "ATAC"
mySeurat <- NucleosomeSignal(mySeurat, n = ncol(mySeurat)*5000,verbose = TRUE)
mySeurat <- TSSEnrichment(mySeurat, fast = TRUE) 

#######################################################
#  Filtering data based on count: 
#  low count or high count cells are discarded
#######################################################

mySeurat <- subset(
  x = mySeurat,
  subset = nCount_ATAC > 5000 &
           nCount_RNA < 20000 &
           nCount_RNA > 1000 &
           TSS.enrichment > 1
)

#######################################################
#  Peak Calling
#######################################################
peaks <- CallPeaks(mySeurat, macs2.path = "/myPath/miniconda3/envs/single_cell/bin/macs2")

#discard peaks too close to edge of scaffold

peaks <- peaks[as.data.frame(ranges(peaks))$start >= 2,]

# quantify counts in each peak

macs2_counts <- FeatureMatrix(
  fragments = Fragments(mySeurat),
  features = peaks,
  cells = colnames(mySeurat)
)

mySeurat[["peaks"]] <- CreateChromatinAssay(
  counts = macs2_counts,
  fragments = Fragments(mySeurat),
  annotation = annotation
)

rm(peaks, macs2_counts)

#######################################################
#  Normalise and reduce GEx data
#######################################################

DefaultAssay(mySeurat) <- "RNA"
mySeurat <- SCTransform(mySeurat, verbose = FALSE)
mySeurat <-  RunPCA(mySeurat)

#remove batch effects
# Seems the issue is, I first have to run it as just 'harmony', because trying to save it by a different name first

mySeurat <- RunHarmony(mySeurat, group.by.vars = "orig.ident", assay.use="SCT")
mySeurat@reductions$sct_harmony <- mySeurat@reductions$harmony
mySeurat[['harmony']] <- NULL

mySeurat <- RunUMAP(
  mySeurat, dims = 1:50,
  min.dist = 0.01, 
  n.neighbors = 50,
  reduction='sct_harmony',
  reduction.name = 'sct_harmony_UMAP', 
  reduction.key = 'gexUMAP_')

#######################################################
#  DNA accessibility data processing
#######################################################

DefaultAssay(mySeurat) <- "peaks"
mySeurat <- RunTFIDF(mySeurat)
mySeurat <- FindTopFeatures(mySeurat, min.cutoff = 'q0') 
mySeurat <- RunSVD(mySeurat)

#remove batch effects
mySeurat <- RunHarmony(mySeurat,group.by.vars = "orig.ident",
                   assay.use = "peaks", 
                   reduction = "lsi",
                   project.dim = FALSE, 
                   reduction.save = "lsi_harmony"
)

#DepthCor(mySeurat, reduction = "lsi_harmony")

mySeurat <- RunUMAP(
  mySeurat,
  reduction = 'lsi_harmony', 
  dims = 1:50,
  min.dist = 0.0001, 
  n.neighbors = 6,  
  reduction.name = "umap.atac", 
  reduction.key = "atacUMAP_")

#######################################################
# UMAP Visualisations
#######################################################

# build a joint neighbor graph using both assays
mySeurat <- FindMultiModalNeighbors(
  object = mySeurat,
  reduction.list = list("sct_harmony", "lsi_harmony"),
  modality.weight.name = "RNA.weight",
  dims.list = list(1:50, 1:50)
)

# build a joint UMAP visualization
mySeurat <- RunUMAP(
  object = mySeurat,
  n.neighbors = 20,
  min.dist = 0.001,
  nn.name = "weighted.nn",
  reduction.name = "wnn.umap",
  reduction.key = "wnnUMAP_"
)

mySeurat <- FindClusters(
  mySeurat, 
  graph.name = "wsnn",
  algorithm = 3, 
  resolution = 1,
  verbose = FALSE
)

#######################################################
# Link Peaks
#######################################################

DefaultAssay(mySeurat) <- "peaks"

# first compute the GC content for each peak
mySeurat <- RegionStats(mySeurat, genome = BSgenome.Ppatens.v3.3)

# link peaks to genes
mySeurat <- LinkPeaks(
  object = mySeurat,
  peak.assay = "peaks",
  expression.assay = "SCT",
  verbose = TRUE
)

save.image(file = paste0(saveName,"Image.RData"))
timoast commented 1 year ago

I think the issue is you need to use the seurat5 branch of Signac if you want to use Seurat v5. They changed how meta features are accessed in v5, so some updates are needed for things to run properly. Can you try installing the seurat5 branch and see if you still have an issue?

devtools::install_github("stuart-lab/signac", ref = "seurat5")
mossconfuse commented 1 year ago

Thank you. I was able to solve the problem by running

devtools::install_github("stuart-lab/signac", ref = "seurat5")

as you recommended. I also needed to run

ppsnV5 <- split(ppsn, f = ppsn@meta.data$orig.ident)

which yielded the seurat v5 object needed as input for FindMotif. Your help was invaluable.

mossconfuse commented 1 year ago

Just some more detail, I can run

DefaultAssay(ppsn) <- "ATAC"
ppsnV5 <- split(ppsn, f = ppsn@meta.data$orig.ident)
DefaultAssay(ppsnV5) <- "peaks"
ppsnV5 <- AddMotifs(object = ppsnV5, genome = BSgenome.Ppatens.v3.3, pfm = pfm)

or

DefaultAssay(ppsn) <- "peaks"
ppsnV5 <- split(ppsn, f = ppsn@meta.data$orig.ident)
DefaultAssay(ppsnV5) <- "ATAC"
ppsnV5 <- AddMotifs(object = ppsnV5, genome = BSgenome.Ppatens.v3.3, pfm = pfm)

but I cannot have the DefaultAssay be the same for the split and the AddMotifs functions, else I get the error:

Building motif matrix
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function 'matchMotifs' for signature '"PWMatrixList", "Assay5"'
XinzeWu commented 7 months ago

packageVersion('Seurat') [1] '5.0.3'

but still error, plz

Error in MatchRegionStats(meta.feature = meta.feature[open.peaks, ], query.feature = meta.feature[significant_peaks, : meta.feature should be a data.frame Traceback:

  1. MatchRegionStats(meta.feature = meta.feature[open.peaks, ], query.feature = meta.feature[significant_peaks, . ], n = 50000)
  2. stop("meta.feature should be a data.frame")

R version 4.3.1 (2023-06-16) Platform: x86_64-conda-linux-gnu (64-bit) Running under: Ubuntu 22.04.3 LTS

Matrix products: default BLAS/LAPACK: /home/wxz/software/mambaforge/envs/signac/lib/libopenblasp-r0.3.24.so; LAPACK version 3.11.0

locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=zh_CN.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=zh_CN.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C

time zone: Asia/Shanghai tzcode source: system (glibc)

attached base packages: [1] grid splines stats4 parallel stats graphics grDevices [8] utils datasets methods base

other attached packages: [1] BSgenome.Hsapiens.UCSC.hg38_1.4.5 BSgenome_1.70.1
[3] rtracklayer_1.62.0 BiocIO_1.12.0
[5] Biostrings_2.70.1 XVector_0.42.0
[7] JASPAR2020_0.99.10 Signac_1.12.0
[9] future_1.33.0 SeuratObject_5.0.0
[11] Seurat_5.0.3 JASPAR2024_0.99.6
[13] BiocFileCache_2.10.1 dbplyr_2.4.0
[15] TFBSTools_1.40.0 dendextend_1.17.1
[17] ape_5.7-1 gridExtra_2.3
[19] mixtools_2.0.0 pheatmap_1.0.12
[21] HiClimR_2.2.1 dbscan_1.1-12
[23] ggplotify_0.1.2 scales_1.3.0
[25] diptest_0.77-0 qs_0.25.7
[27] patchwork_1.1.3 ggrepel_0.9.4
[29] cicero_1.20.0 Gviz_1.46.1
[31] monocle_2.30.0 DDRTree_0.1.5
[33] VGAM_1.1-9 Biobase_2.62.0
[35] GenomicRanges_1.54.1 GenomeInfoDb_1.38.1
[37] IRanges_2.36.0 S4Vectors_0.40.2
[39] BiocGenerics_0.48.1 BuenColors_0.5.6
[41] MASS_7.3-60 RColorBrewer_1.1-3
[43] lubridate_1.9.3 forcats_1.0.0
[45] stringr_1.5.0 dplyr_1.1.3
[47] purrr_1.0.2 readr_2.1.4
[49] tidyr_1.3.0 tibble_3.2.1
[51] tidyverse_2.0.0 ggplot2_3.4.4
[53] umap_0.2.10.0 irlba_2.3.5.1
[55] densityClust_0.3.2 Rtsne_0.16
[57] proxy_0.4-27 Matrix_1.6-5
[59] data.table_1.14.8

loaded via a namespace (and not attached): [1] R.methodsS3_1.8.2 dichromat_2.0-0.1
[3] vroom_1.6.4 progress_1.2.2
[5] nnet_7.3-19 poweRlaw_0.80.0
[7] goftest_1.2-3 vctrs_0.6.5
[9] spatstat.random_3.2-1 RApiSerialize_0.1.2
[11] digest_0.6.33 png_0.1-8
[13] IRdisplay_1.1 deldir_1.0-9
[15] parallelly_1.36.0 combinat_0.0-8
[17] reshape2_1.4.4 httpuv_1.6.12
[19] withr_3.0.0 xfun_0.41
[21] ellipsis_0.3.2 survival_3.5-7
[23] memoise_2.0.1 qlcMatrix_0.9.7
[25] ggsci_3.0.0 docopt_0.7.1
[27] zoo_1.8-12 gtools_3.9.4
[29] pbapply_1.7-2 IRkernel_1.3.2
[31] R.oo_1.26.0 Formula_1.2-5
[33] prettyunits_1.2.0 KEGGREST_1.42.0
[35] promises_1.2.1 httr_1.4.7
[37] restfulr_0.0.15 globals_0.16.2
[39] fitdistrplus_1.1-11 stringfish_0.15.7
[41] rstudioapi_0.15.0 miniUI_0.1.1.1
[43] generics_0.1.3 base64enc_0.1-3
[45] sparsesvd_0.2-2 curl_5.1.0
[47] ncdf4_1.22 repr_1.1.6
[49] zlibbioc_1.48.0 polyclip_1.10-6
[51] GenomeInfoDbData_1.2.10 SparseArray_1.2.2
[53] xtable_1.8-4 pracma_2.4.4
[55] evaluate_0.23 S4Arrays_1.2.0
[57] hms_1.1.3 colorspace_2.1-0
[59] filelock_1.0.2 ROCR_1.0-11
[61] reticulate_1.34.0 spatstat.data_3.0-3
[63] magrittr_2.0.3 lmtest_0.9-40
[65] later_1.3.1 viridis_0.6.5
[67] lattice_0.22-5 spatstat.geom_3.2-7
[69] future.apply_1.11.0 scattermore_1.2
[71] XML_3.99-0.14 cowplot_1.1.1
[73] matrixStats_1.0.0 RcppAnnoy_0.0.21
[75] Hmisc_5.1-1 pillar_1.9.0
[77] nlme_3.1-163 caTools_1.18.2
[79] compiler_4.3.1 RSpectra_0.16-1
[81] stringi_1.7.12 tensor_1.5
[83] SummarizedExperiment_1.32.0 GenomicAlignments_1.38.0
[85] plyr_1.8.9 crayon_1.5.2
[87] abind_1.4-5 gridGraphics_0.5-1
[89] sp_2.1-1 bit_4.0.5
[91] fastmatch_1.1-4 codetools_0.2-19
[93] openssl_2.1.1 slam_0.1-50
[95] biovizBase_1.50.0 plotly_4.10.3
[97] mime_0.12 leidenbase_0.1.18
[99] Rcpp_1.0.11 interp_1.1-6
[101] knitr_1.45 blob_1.2.4
[103] utf8_1.2.4 seqLogo_1.68.0
[105] pbdZMQ_0.3-10 AnnotationFilter_1.26.0
[107] fs_1.6.3 listenv_0.9.0
[109] checkmate_2.3.0 statmod_1.5.0
[111] tzdb_0.4.0 pkgconfig_2.0.3
[113] tools_4.3.1 cachem_1.0.8
[115] RSQLite_2.3.2 viridisLite_0.4.2
[117] DBI_1.1.3 fastmap_1.1.1
[119] rmarkdown_2.25 ica_1.0-3
[121] Rsamtools_2.18.0 FNN_1.1.3.2
[123] dotCall64_1.1-0 VariantAnnotation_1.48.1
[125] RANN_2.6.1 rpart_4.1.21
[127] farver_2.1.1 yaml_2.3.7
[129] latticeExtra_0.6-30 MatrixGenerics_1.14.0
[131] foreign_0.8-85 cli_3.6.2
[133] motifmatchr_1.24.0 leiden_0.4.3
[135] lifecycle_1.0.4 uwot_0.1.16
[137] askpass_1.2.0 kernlab_0.9-32
[139] backports_1.4.1 BiocParallel_1.36.0
[141] annotate_1.80.0 timechange_0.2.0
[143] gtable_0.3.4 rjson_0.2.21
[145] ggridges_0.5.4 progressr_0.14.0
[147] limma_3.58.1 jsonlite_1.8.7
[149] bitops_1.0-7 bit64_4.0.5
[151] yulab.utils_0.1.4 spatstat.utils_3.0-4
[153] RcppParallel_5.1.6 CNEr_1.38.0
[155] segmented_2.0-2 R.utils_2.12.3
[157] lazyeval_0.2.2 shiny_1.7.5.1
[159] htmltools_0.5.6.1 GO.db_3.18.0
[161] sctransform_0.4.1 rappdirs_0.3.3
[163] ensembldb_2.26.0 glue_1.7.0
[165] TFMPvalue_0.0.9 spam_2.10-0
[167] RCurl_1.98-1.12 jpeg_0.1-10
[169] igraph_1.5.1 R6_2.5.1
[171] labeling_0.4.3 RcppRoll_0.3.0
[173] HSMMSingleCell_1.22.0 GenomicFeatures_1.54.1
[175] cluster_2.1.4 DirichletMultinomial_1.44.0 [177] DelayedArray_0.28.0 tidyselect_1.2.0
[179] ProtGenerics_1.34.0 htmlTable_2.4.2
[181] xml2_1.3.5 AnnotationDbi_1.64.1
[183] fastICA_1.2-4 munsell_0.5.0
[185] KernSmooth_2.23-22 htmlwidgets_1.6.2
[187] biomaRt_2.58.0 rlang_1.1.3
[189] spatstat.sparse_3.0-3 spatstat.explore_3.2-5
[191] remotes_2.4.2.1 uuid_1.1-1
[193] fansi_1.0.6