Skip to contents
clustOpt 1.2
Pre-allocate the results list in the main cross-validation loop instead of growing it with c() , reducing memory allocation overhead for many subjects.
Use crossprod() instead of explicit t() %*% in PCA projections, avoiding materialization of transposed gene-by-cell matrices.
Use Matrix::crossprod() in modularity calculation to stay in sparse matrix space and avoid dense transposition of the cluster indicator matrix.
Replace do.call(rbind, lapply(...)) with t(vapply(...)) in MAD calculation to avoid intermediate list allocation.
Precompute SNN graph and distance matrix once per held-out subject (shared across resolutions) instead of recomputing per resolution.
Pre-extract cluster assignments from metadata by resolution to avoid repeated column lookups.
Logging and verbosity
verbose parameter now accepts integer levels (0-3) for fine-grained control: 0 = silent, 1 = key milestones, 2 = detailed progress, 3 = Seurat output.
Backward-compatible: verbose = TRUE maps to level 1, FALSE to 0.
Added per-step timing via [step_name] Xs log messages at verbose >= 1.
Bug fixes
Fixed flipped sign in KL divergence calculation.
Fixed ARI estimate for comparing singleton clusters.
Handled edge cases in sample validation and metric computation.
Package reorganization
Split monolithic clustOpt.R and utils.R into focused modules: clust_opt.R, data_preparation.R, metrics.R, sketching.R, validation.R, visualization.R.
Removed vignette build cache from version control.
clustOpt 1.1
Added additional clustering metrics.
clustOpt 1.0
Initial public release with subject-wise cross-validation, leverage score sketching, BPCells on-disk support, and silhouette-based evaluation.