Contents

Here, we demonstrate a grid search of clustering parameters with a mouse hippocampus VeraFISH dataset. BANKSY currently provides four algorithms for clustering the BANKSY matrix with clusterBanksy: Leiden (default), Louvain, k-means, and model-based clustering. In this vignette, we run only Leiden clustering. See ?clusterBanksy for more details on the parameters for different clustering methods.

1 Loading the data

The dataset comprises gene expression for 10,944 cells and 120 genes in 2 spatial dimensions. See ?Banksy::hippocampus for more details.

# Load libs
library(Banksy)

library(SummarizedExperiment)
library(SpatialExperiment)
library(scuttle)

library(scater)
library(cowplot)
library(ggplot2)

# Load data
data(hippocampus)
gcm <- hippocampus$expression
locs <- as.matrix(hippocampus$locations)

Here, gcm is a gene by cell matrix, and locs is a matrix specifying the coordinates of the centroid for each cell.

head(gcm[,1:5])
#>         cell_1276 cell_8890 cell_691 cell_396 cell_9818
#> Sparcl1        45         0       11       22         0
#> Slc1a2         17         0        6        5         0
#> Map            10         0       12       16         0
#> Sqstm1         26         0        0        2         0
#> Atp1a2          0         0        4        3         0
#> Tnc             0         0        0        0         0
head(locs)
#>                 sdimx    sdimy
#> cell_1276  -13372.899 15776.37
#> cell_8890    8941.101 15866.37
#> cell_691   -14882.899 15896.37
#> cell_396   -15492.899 15835.37
#> cell_9818   11308.101 15846.37
#> cell_11310  14894.101 15810.37

Initialize a SpatialExperiment object and perform basic quality control. We keep cells with total transcript count within the 5th and 98th percentile:

se <- SpatialExperiment(assay = list(counts = gcm), spatialCoords = locs)
colData(se) <- cbind(colData(se), spatialCoords(se))

# QC based on total counts
qcstats <- perCellQCMetrics(se)
#> Warning in .per_cell_qc_metrics(assay(x, assay.type), subsets = subsets, : 'perCellQCMetrics' is deprecated.
#> Use 'scrapper::computeRnaQcMetrics' instead.
#> See help("Deprecated")
thres <- quantile(qcstats$total, c(0.05, 0.98))
keep <- (qcstats$total > thres[1]) & (qcstats$total < thres[2])
se <- se[, keep]

Next, perform normalization of the data.

# Normalization to mean library size
se <- computeLibraryFactors(se)
#> Warning in .library_size_factors(assay(x, assay.type), ...): 'librarySizeFactors' is deprecated.
#> Use 'scrapper::centerSizeFactors' instead.
#> See help("Deprecated")
aname <- "normcounts"
assay(se, aname) <- normalizeCounts(se, log = FALSE)
#> Warning in .local(x, ...): 'normalizeCounts' is deprecated.
#> Use 'scrapper::normalizeCounts' instead.
#> See help("Deprecated")

2 Parameters

BANKSY has a few key parameters. We describe these below.

2.1 AGF usage

For characterising neighborhoods, BANKSY computes the weighted neighborhood mean (H_0) and the azimuthal Gabor filter (H_1), which estimates gene expression gradients. Setting compute_agf=TRUE computes both H_0 and H_1.

2.2 k-geometric

k_geom specifies the number of neighbors used to compute each H_m for m=0,1. If a single value is specified, the same k_geom will be used for each feature matrix. Alternatively, multiple values of k_geom can be provided for each feature matrix. Here, we use k_geom[1]=15 and k_geom[2]=30 for H_0 and H_1 respectively. More neighbors are used to compute gradients.

For datasets generated using Visium v1/v2, use k_geom=18 (or k_geom <- c(18, 18) if compute_agf = TRUE), since that corresponds to taking as neighbourhood two concentric rings of spots around each spot.

We compute the neighborhood feature matrices using normalized expression (normcounts in the se object).

k_geom <- c(15, 30)
se <- computeBanksy(se, assay_name = aname, compute_agf = TRUE, k_geom = k_geom)
#> Computing neighbors...
#> Spatial mode is kNN_median
#> Parameters: k_geom=15
#> Done
#> Computing neighbors...
#> Spatial mode is kNN_median
#> Parameters: k_geom=30
#> Done
#> Computing harmonic m = 0 with 15 neighbors
#> Done
#> Computing harmonic m = 1 with 30 neighbors
#> Centering
#> Done

computeBanksy populates the assays slot with H_0 and H_1 in this instance:

se
#> class: SpatialExperiment 
#> dim: 120 10205 
#> metadata(1): BANKSY_params
#> assays(4): counts normcounts H0 H1
#> rownames(120): Sparcl1 Slc1a2 ... Notch3 Egfr
#> rowData names(0):
#> colnames(10205): cell_1276 cell_691 ... cell_11635 cell_10849
#> colData names(4): sample_id sdimx sdimy sizeFactor
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> spatialCoords names(2) : sdimx sdimy
#> imgData names(1): sample_id

2.3 lambda

The lambda parameter is a mixing parameter in [0,1] which determines how much spatial information is incorporated for downstream analysis. With smaller values of lambda, BANKY operates in cell-typing mode, while at higher levels of lambda, BANKSY operates in domain-finding mode. As a starting point, we recommend lambda=0.2 for cell-typing and lambda=0.8 for zone-finding, except for datasets generated using the Visium v1/v2 technology, for which we recommend lambda=0.2 for domain finding. See the note in the tutorial on the main page for more info.

Here, we run lambda=0 which corresponds to non-spatial clustering, and lambda=0.2 for spatially-informed cell-typing. We compute PCs with and without the AGF (H_1).

lambda <- c(0, 0.2)
se <- runBanksyPCA(se, use_agf = c(FALSE, TRUE), lambda = lambda, seed = 1000, lazy = FALSE)
#> Using seed=1000
#> Using seed=1000
#> Using seed=1000
#> Using seed=1000

runBanksyPCA populates the reducedDims slot, with each combination of use_agf and lambda provided.

reducedDimNames(se)
#> [1] "PCA_M0_lam0"   "PCA_M0_lam0.2" "PCA_M1_lam0"   "PCA_M1_lam0.2"

2.4 Clustering parameters

Next, we cluster the BANKSY embedding with Leiden graph-based clustering. This admits two parameters: k_neighbors and resolution. k_neighbors determines the number of k nearest neighbors used to construct the shared nearest neighbors graph. Leiden clustering is then performed on the resultant graph with resolution resolution. For reproducibiltiy we set a seed for each parameter combination.

k <- 50
res <- 1
se <- clusterBanksy(se, use_agf = c(FALSE, TRUE), lambda = lambda, k_neighbors = k, resolution = res, seed = 1000)
#> Using seed=1000
#> Using seed=1000
#> Using seed=1000
#> Using seed=1000

clusterBanksy populates colData(se) with cluster labels:

colnames(colData(se))
#> [1] "sample_id"                "sdimx"                    "sdimy"                    "sizeFactor"              
#> [5] "clust_M0_lam0_k50_res1"   "clust_M0_lam0.2_k50_res1" "clust_M1_lam0_k50_res1"   "clust_M1_lam0.2_k50_res1"

3 Comparing cluster results

To compare clustering runs visually, different runs can be relabeled to minimise their differences with connectClusters:

se <- connectClusters(se)
#> clust_M1_lam0_k50_res1 --> clust_M0_lam0_k50_res1
#> clust_M0_lam0.2_k50_res1 --> clust_M1_lam0_k50_res1
#> clust_M1_lam0.2_k50_res1 --> clust_M0_lam0.2_k50_res1

Visualise spatial coordinates with cluster labels.

cnames <- colnames(colData(se))
cnames <- cnames[grep("^clust", cnames)]
cplots <- lapply(cnames, function(cnm) {
    plotColData(se, x = "sdimx", y = "sdimy", point_size = 0.1, colour_by = cnm) +
        coord_equal() +
        labs(title = cnm) +
        theme(legend.title = element_blank()) +
        guides(colour = guide_legend(override.aes = list(size = 2)))
})

plot_grid(plotlist = cplots, ncol = 2)

Compare all cluster outputs with compareClusters. This function computes pairwise cluster comparison metrics between the clusters in colData(se) based on adjusted Rand index (ARI):

compareClusters(se, func = "ARI")
#>                          clust_M0_lam0_k50_res1 clust_M0_lam0.2_k50_res1 clust_M1_lam0_k50_res1
#> clust_M0_lam0_k50_res1                    1.000                     0.67                  1.000
#> clust_M0_lam0.2_k50_res1                  0.670                     1.00                  0.670
#> clust_M1_lam0_k50_res1                    1.000                     0.67                  1.000
#> clust_M1_lam0.2_k50_res1                  0.747                     0.87                  0.747
#>                          clust_M1_lam0.2_k50_res1
#> clust_M0_lam0_k50_res1                      0.747
#> clust_M0_lam0.2_k50_res1                    0.870
#> clust_M1_lam0_k50_res1                      0.747
#> clust_M1_lam0.2_k50_res1                    1.000

or normalized mutual information (NMI):

compareClusters(se, func = "NMI")
#>                          clust_M0_lam0_k50_res1 clust_M0_lam0.2_k50_res1 clust_M1_lam0_k50_res1
#> clust_M0_lam0_k50_res1                    1.000                    0.741                  1.000
#> clust_M0_lam0.2_k50_res1                  0.741                    1.000                  0.741
#> clust_M1_lam0_k50_res1                    1.000                    0.741                  1.000
#> clust_M1_lam0.2_k50_res1                  0.782                    0.915                  0.782
#>                          clust_M1_lam0.2_k50_res1
#> clust_M0_lam0_k50_res1                      0.782
#> clust_M0_lam0.2_k50_res1                    0.915
#> clust_M1_lam0_k50_res1                      0.782
#> clust_M1_lam0.2_k50_res1                    1.000

See ?compareClusters for the full list of comparison measures.

4 Session information

Vignette runtime:

#> Time difference of 52.55253 secs
options(width = 120)
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.6.1 (2026-06-24)
#>  os       Ubuntu 24.04.5 LTS
#>  system   x86_64, linux-gnu
#>  ui       X11
#>  language (EN)
#>  collate  C
#>  ctype    en_US.UTF-8
#>  tz       America/New_York
#>  date     2026-09-30
#>  pandoc   3.1.3 @ /usr/bin/ (via rmarkdown)
#>  quarto   1.7.32 @ /usr/local/bin/quarto
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  package              * version   date (UTC) lib source
#>  abind                  1.4-8     2024-09-12 [2] CRAN (R 4.6.1)
#>  AnnotationDbi          1.75.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  AnnotationHub        * 4.3.2     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  aricode                1.1.0     2026-05-13 [2] CRAN (R 4.6.1)
#>  attempt                0.3.1     2020-05-03 [2] CRAN (R 4.6.1)
#>  Banksy               * 1.9.4     2026-09-30 [1] Bioconductor 3.24 (R 4.6.1)
#>  beachmat               2.29.3    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  beeswarm               0.4.0     2021-06-01 [2] CRAN (R 4.6.1)
#>  benchmarkme            1.0.8     2022-06-12 [2] CRAN (R 4.6.1)
#>  benchmarkmeData        2.0.0     2026-01-19 [2] CRAN (R 4.6.1)
#>  Biobase              * 2.73.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocBaseUtils          1.15.1    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocFileCache        * 3.3.0     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocGenerics         * 0.59.12   2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocIO                 1.23.3    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocManager            1.30.27   2025-11-14 [2] CRAN (R 4.6.1)
#>  BiocNeighbors          2.7.3     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocParallel           1.47.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocSingular           1.29.1    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocStyle            * 2.41.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  BiocVersion            3.24.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  Biostrings             2.81.9    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  bit                    4.6.0     2025-03-06 [2] CRAN (R 4.6.1)
#>  bit64                  4.8.6     2026-09-01 [2] CRAN (R 4.6.1)
#>  bitops                 1.1-0     2026-07-30 [2] CRAN (R 4.6.1)
#>  blob                   1.3.0     2026-01-14 [2] CRAN (R 4.6.1)
#>  bluster                1.23.1    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  bookdown               0.48      2026-08-28 [2] CRAN (R 4.6.1)
#>  bslib                  0.12.0    2026-08-04 [2] CRAN (R 4.6.1)
#>  cachem                 1.1.0     2024-05-16 [2] CRAN (R 4.6.1)
#>  cigarillo              1.3.1     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  circlize               0.4.18    2026-04-04 [2] CRAN (R 4.6.1)
#>  cli                    3.6.6     2026-04-09 [2] CRAN (R 4.6.1)
#>  clue                   0.3-68    2026-03-26 [2] CRAN (R 4.6.1)
#>  cluster                2.1.8.3   2026-07-30 [3] CRAN (R 4.6.1)
#>  codetools              0.2-20    2024-03-31 [3] CRAN (R 4.6.1)
#>  colorspace             2.1-3     2026-07-12 [2] CRAN (R 4.6.1)
#>  ComplexHeatmap         2.29.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  config                 0.3.2     2023-08-30 [2] CRAN (R 4.6.1)
#>  cowplot              * 1.2.0     2025-07-07 [2] CRAN (R 4.6.1)
#>  crayon                 1.5.3     2024-06-20 [2] CRAN (R 4.6.1)
#>  curl                   8.0.0     2026-08-25 [2] CRAN (R 4.6.1)
#>  data.table           * 1.18.6.1  2026-08-24 [2] CRAN (R 4.6.1)
#>  DBI                    1.3.0     2026-02-25 [2] CRAN (R 4.6.1)
#>  dbplyr               * 2.6.0     2026-06-17 [2] CRAN (R 4.6.1)
#>  dbscan                 1.2.6     2026-08-25 [2] CRAN (R 4.6.1)
#>  DelayedArray           0.39.8    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  deldir                 2.0-4     2024-02-28 [2] CRAN (R 4.6.1)
#>  dichromat              2.0-1     2026-07-22 [2] CRAN (R 4.6.1)
#>  digest                 0.6.39    2025-11-19 [2] CRAN (R 4.6.1)
#>  doParallel             1.0.17    2022-02-07 [2] CRAN (R 4.6.1)
#>  dotCall64              1.2       2024-10-04 [2] CRAN (R 4.6.1)
#>  dplyr                  1.2.1     2026-04-03 [2] CRAN (R 4.6.1)
#>  dqrng                  0.4.1     2024-05-28 [2] CRAN (R 4.6.1)
#>  DT                     0.34.0    2025-09-02 [2] CRAN (R 4.6.1)
#>  edgeR                  4.99.6    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  evaluate               1.0.5     2025-08-27 [2] CRAN (R 4.6.1)
#>  ExperimentHub        * 3.3.2     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  farver                 2.1.2     2024-05-13 [2] CRAN (R 4.6.1)
#>  fastDummies            1.7.6     2026-04-22 [2] CRAN (R 4.6.1)
#>  fastmap                1.2.0     2024-05-15 [2] CRAN (R 4.6.1)
#>  filelock               1.0.3     2023-12-11 [2] CRAN (R 4.6.1)
#>  fitdistrplus           1.2-6     2026-01-24 [2] CRAN (R 4.6.1)
#>  foreach                1.5.2     2022-02-02 [2] CRAN (R 4.6.1)
#>  future                 1.76.0    2026-09-24 [2] CRAN (R 4.6.1)
#>  future.apply           1.20.2    2026-02-20 [2] CRAN (R 4.6.1)
#>  generics             * 0.1.4     2025-05-09 [2] CRAN (R 4.6.1)
#>  GenomicAlignments      1.49.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  GenomicRanges        * 1.65.4    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  GetoptLong             1.1.1     2026-04-08 [2] CRAN (R 4.6.1)
#>  ggbeeswarm             0.7.3     2025-11-29 [2] CRAN (R 4.6.1)
#>  ggplot2              * 4.0.3     2026-04-22 [2] CRAN (R 4.6.1)
#>  ggrepel                0.9.8     2026-03-17 [2] CRAN (R 4.6.1)
#>  ggridges               0.5.7     2025-08-27 [2] CRAN (R 4.6.1)
#>  GlobalOptions          0.1.4     2026-04-08 [2] CRAN (R 4.6.1)
#>  globals                0.19.1    2026-03-13 [2] CRAN (R 4.6.1)
#>  glue                   1.8.1     2026-04-17 [2] CRAN (R 4.6.1)
#>  goftest                1.2-3     2021-10-07 [2] CRAN (R 4.6.1)
#>  golem                  1.0.1     2026-07-07 [2] CRAN (R 4.6.1)
#>  gridExtra              2.3.1     2026-06-25 [2] CRAN (R 4.6.1)
#>  gtable                 0.3.6     2024-10-25 [2] CRAN (R 4.6.1)
#>  harmony              * 2.0.5     2026-06-12 [2] CRAN (R 4.6.1)
#>  htmltools              0.5.9     2025-12-04 [2] CRAN (R 4.6.1)
#>  htmlwidgets            1.6.4     2023-12-06 [2] CRAN (R 4.6.1)
#>  httpuv                 1.6.17    2026-03-18 [2] CRAN (R 4.6.1)
#>  httr                   1.4.9     2026-09-01 [2] CRAN (R 4.6.1)
#>  httr2                  1.3.0     2026-07-13 [2] CRAN (R 4.6.1)
#>  ica                    1.0-3     2022-07-08 [2] CRAN (R 4.6.1)
#>  igraph                 2.3.4     2026-09-30 [2] CRAN (R 4.6.1)
#>  IRanges              * 2.47.5    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  irlba                  2.3.7     2026-01-30 [2] CRAN (R 4.6.1)
#>  iterators              1.0.14    2022-02-05 [2] CRAN (R 4.6.1)
#>  jquerylib              0.1.4     2021-04-26 [2] CRAN (R 4.6.1)
#>  jsonlite               2.0.0     2025-03-27 [2] CRAN (R 4.6.1)
#>  KEGGREST               1.53.6    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  KernSmooth             2.23-27   2026-08-12 [3] CRAN (R 4.6.1)
#>  knitr                  1.52      2026-09-06 [2] CRAN (R 4.6.1)
#>  labeling               0.4.3     2023-08-29 [2] CRAN (R 4.6.1)
#>  later                  1.4.8     2026-03-05 [2] CRAN (R 4.6.1)
#>  lattice                0.23-1    2026-08-12 [3] CRAN (R 4.6.1)
#>  leidenAlg              1.1.8     2026-05-31 [2] CRAN (R 4.6.1)
#>  lifecycle              1.0.5     2026-01-08 [2] CRAN (R 4.6.1)
#>  limma                  3.99.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  listenv                1.0.0     2026-06-22 [2] CRAN (R 4.6.1)
#>  lmtest                 0.9-40    2022-03-21 [2] CRAN (R 4.6.1)
#>  locfit                 1.5-9.12  2025-03-05 [2] CRAN (R 4.6.1)
#>  magick                 2.9.1     2026-02-28 [2] CRAN (R 4.6.1)
#>  magrittr               2.0.5     2026-04-04 [2] CRAN (R 4.6.1)
#>  mapproj                1.2.12    2025-05-19 [2] CRAN (R 4.6.1)
#>  maps                   3.4.3     2025-05-26 [2] CRAN (R 4.6.1)
#>  MASS                   7.3-66    2026-07-15 [3] CRAN (R 4.6.1)
#>  Matrix                 1.7-6     2026-07-25 [3] CRAN (R 4.6.1)
#>  MatrixGenerics       * 1.25.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  matrixStats          * 1.5.0     2025-01-07 [2] CRAN (R 4.6.1)
#>  mclust                 6.1.3     2026-07-05 [2] CRAN (R 4.6.1)
#>  memoise                2.0.1     2021-11-26 [2] CRAN (R 4.6.1)
#>  metapod                1.21.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  mime                   0.13      2025-03-17 [2] CRAN (R 4.6.1)
#>  miniUI                 0.1.2     2025-04-17 [2] CRAN (R 4.6.1)
#>  nlme                   3.1-171   2026-09-01 [3] CRAN (R 4.6.1)
#>  otel                   0.2.0     2025-08-29 [2] CRAN (R 4.6.1)
#>  paletteer              1.7.0     2026-01-08 [2] CRAN (R 4.6.1)
#>  pals                   1.10      2025-03-07 [2] CRAN (R 4.6.1)
#>  parallelly             1.48.0    2026-06-29 [2] CRAN (R 4.6.1)
#>  patchwork              1.3.2     2025-08-25 [2] CRAN (R 4.6.1)
#>  pbapply                1.7-5     2026-09-01 [2] CRAN (R 4.6.1)
#>  pillar                 1.11.1    2025-09-17 [2] CRAN (R 4.6.1)
#>  pkgconfig              2.0.3     2019-09-22 [2] CRAN (R 4.6.1)
#>  plotly                 4.12.1    2026-07-22 [2] CRAN (R 4.6.1)
#>  plyr                   1.8.9     2023-10-02 [2] CRAN (R 4.6.1)
#>  png                    0.1-9     2026-03-15 [2] CRAN (R 4.6.1)
#>  polyclip               1.10-7    2024-07-23 [2] CRAN (R 4.6.1)
#>  progressr              1.0.0     2026-07-04 [2] CRAN (R 4.6.1)
#>  promises               1.5.0     2025-11-01 [2] CRAN (R 4.6.1)
#>  purrr                  1.2.2     2026-04-10 [2] CRAN (R 4.6.1)
#>  R6                     2.6.1     2025-02-15 [2] CRAN (R 4.6.1)
#>  RANN                   2.6.3     2026-08-24 [2] CRAN (R 4.6.1)
#>  rappdirs               0.3.4     2026-01-17 [2] CRAN (R 4.6.1)
#>  RColorBrewer           1.1-3     2022-04-03 [2] CRAN (R 4.6.1)
#>  Rcpp                 * 1.1.2     2026-07-05 [2] CRAN (R 4.6.1)
#>  RcppAnnoy              0.0.23    2026-01-12 [2] CRAN (R 4.6.1)
#>  RcppHNSW               0.7.0     2026-05-26 [2] CRAN (R 4.6.1)
#>  RcppHungarian          0.3       2023-09-05 [2] CRAN (R 4.6.1)
#>  RCurl                  1.98-1.20 2026-08-21 [2] CRAN (R 4.6.1)
#>  rematch2               2.1.2     2020-05-01 [2] CRAN (R 4.6.1)
#>  reshape2               1.4.5     2025-11-12 [2] CRAN (R 4.6.1)
#>  restfulr               0.0.17    2026-06-11 [2] CRAN (R 4.6.1)
#>  reticulate             1.47.0    2026-09-03 [2] CRAN (R 4.6.1)
#>  RhpcBLASctl            0.23-42   2023-02-11 [2] CRAN (R 4.6.1)
#>  rjson                  0.2.23    2024-09-16 [2] CRAN (R 4.6.1)
#>  rlang                  1.3.0     2026-07-05 [2] CRAN (R 4.6.1)
#>  rmarkdown              2.32      2026-09-01 [2] CRAN (R 4.6.1)
#>  ROCR                   1.0-12    2026-01-23 [2] CRAN (R 4.6.1)
#>  Rsamtools              2.29.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  RSpectra               0.16-2    2024-07-18 [2] CRAN (R 4.6.1)
#>  RSQLite                3.53.3    2026-06-30 [2] CRAN (R 4.6.1)
#>  rsvd                   1.0.5     2021-04-16 [2] CRAN (R 4.6.1)
#>  rtracklayer            1.73.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  Rtsne                  0.17      2023-12-07 [2] CRAN (R 4.6.1)
#>  S4Arrays               1.13.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  S4Vectors            * 0.51.10   2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  S7                     0.2.2     2026-04-22 [2] CRAN (R 4.6.1)
#>  sass                   0.4.10    2025-04-11 [2] CRAN (R 4.6.1)
#>  ScaledMatrix           1.21.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  scales                 1.4.0     2025-04-24 [2] CRAN (R 4.6.1)
#>  scater               * 1.41.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  scattermore            1.2       2023-06-12 [2] CRAN (R 4.6.1)
#>  sccore                 1.0.7     2026-04-06 [2] CRAN (R 4.6.1)
#>  scran                * 1.41.1    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  scrapper               1.7.9     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  sctransform            0.4.3     2026-01-10 [2] CRAN (R 4.6.1)
#>  scuttle              * 1.23.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  Seqinfo              * 1.3.2     2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  sessioninfo            1.2.4     2026-06-04 [2] CRAN (R 4.6.1)
#>  Seurat               * 5.5.1     2026-06-26 [2] CRAN (R 4.6.1)
#>  SeuratObject         * 5.4.0     2026-04-11 [2] CRAN (R 4.6.1)
#>  shape                  1.4.6.1   2024-02-23 [2] CRAN (R 4.6.1)
#>  shiny                  1.14.0    2026-06-21 [2] CRAN (R 4.6.1)
#>  shinyWidgets           0.9.1     2026-03-09 [2] CRAN (R 4.6.1)
#>  SingleCellExperiment * 1.35.2    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  sp                   * 2.2-3     2026-07-19 [2] CRAN (R 4.6.1)
#>  spam                   2.11-4    2026-05-29 [2] CRAN (R 4.6.1)
#>  SparseArray            1.13.4    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  SpatialExperiment    * 1.23.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  spatialLIBD          * 1.25.3    2026-09-29 [2] Bioconductor 3.24 (R 4.6.1)
#>  spatstat.data          3.1-9     2025-10-18 [2] CRAN (R 4.6.1)
#>  spatstat.explore       3.8-3     2026-09-23 [2] CRAN (R 4.6.1)
#>  spatstat.geom          3.8-3     2026-09-18 [2] CRAN (R 4.6.1)
#>  spatstat.random        3.5-2     2026-09-22 [2] CRAN (R 4.6.1)
#>  spatstat.sparse        3.2-0     2026-05-21 [2] CRAN (R 4.6.1)
#>  spatstat.univar        3.2-0     2026-05-18 [2] CRAN (R 4.6.1)
#>  spatstat.utils         3.2-5     2026-09-11 [2] CRAN (R 4.6.1)
#>  statmod                1.5.2     2026-05-17 [2] CRAN (R 4.6.1)
#>  stringi                1.8.9     2026-08-04 [2] CRAN (R 4.6.1)
#>  stringr                1.6.0     2025-11-04 [2] CRAN (R 4.6.1)
#>  SummarizedExperiment * 1.43.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  survival               3.8-12    2026-09-09 [3] CRAN (R 4.6.1)
#>  tensor                 1.5.1     2025-06-17 [2] CRAN (R 4.6.1)
#>  tibble                 3.3.1     2026-01-11 [2] CRAN (R 4.6.1)
#>  tidyr                  1.3.2     2025-12-19 [2] CRAN (R 4.6.1)
#>  tidyselect             1.2.1     2024-03-11 [2] CRAN (R 4.6.1)
#>  tinytex                0.61      2026-09-17 [2] CRAN (R 4.6.1)
#>  uwot                   0.2.5     2026-08-29 [2] CRAN (R 4.6.1)
#>  vctrs                  0.7.3     2026-04-11 [2] CRAN (R 4.6.1)
#>  vipor                  0.4.7     2023-12-18 [2] CRAN (R 4.6.1)
#>  viridis                0.6.5     2024-01-29 [2] CRAN (R 4.6.1)
#>  viridisLite            0.4.3     2026-02-04 [2] CRAN (R 4.6.1)
#>  withr                  3.0.3     2026-06-19 [2] CRAN (R 4.6.1)
#>  xfun                   0.61      2026-09-16 [2] CRAN (R 4.6.1)
#>  XML                    3.99-0.25 2026-09-27 [2] CRAN (R 4.6.1)
#>  xtable                 1.8-8     2026-02-22 [2] CRAN (R 4.6.1)
#>  XVector                0.53.0    2026-09-30 [2] Bioconductor 3.24 (R 4.6.1)
#>  yaml                   2.3.12    2025-12-10 [2] CRAN (R 4.6.1)
#>  zoo                    1.9-1     2026-09-25 [2] CRAN (R 4.6.1)
#> 
#>  [1] /tmp/RtmpPwARhn/Rinst3789a0315afa5a
#>  [2] /home/biocbuild/bbs-3.24-bioc/R/site-library
#>  [3] /home/biocbuild/bbs-3.24-bioc/R/library
#>  * ── Packages attached to the search path.
#> 
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────