Changelog
presto 1.1.0
First CRAN release. Version 1.0.0 refers to the pre-CRAN package installed from GitHub.
New features
-
wilcoxauc()accepts disk-backedDelayedMatrixinput (e.g. HDF5-backed assays from HDF5Array), processed in feature blocks so the whole matrix never has to be loaded in memory (#26). Other matrix-like classes with anas(., "dgCMatrix")method (e.g. BPCells) are coerced automatically. -
wilcoxauc()gains atransposedargument for observations x features input (samples in rows), which runs directly on that layout without materializing a transposed copy (#18). -
wilcoxauc()gains annthreadsargument: the per-feature ranking of sparse (dgCMatrix) input can run multithreaded. Results are identical at any thread count; roughly 2.6x faster with 4 threads on a 3,000 x 80,000 matrix. The default (nthreads = 1) is unchanged. - New
toy_seurat()andtoy_sce()generate small example Seurat / SingleCellExperiment objects on the fly with the installed package versions, so they can never go stale. - Two vignettes: Getting started with presto and Pseudobulk differential expression with DESeq2, both worked through on a real 25,341-cell colon CD8 T-cell dataset (GSE206299, Thomas et al. 2024).
Breaking changes
-
wilcoxauc()now stops with an informative error whenXcontainsNAvalues, instead of silently returning incorrect results (#25). - The shipped
object_seuratandobject_scedatasets were removed; usetoy_seurat()andtoy_sce()instead. -
Rcppanddata.tablemoved fromDependstoImports, so they are no longer attached to the search path when presto is loaded.
Bug fixes
- The Wilcoxon variance correction now includes every tie group: the final tie group per feature and the implicit-zero group of all-zero features used to be dropped, inflating p-values on heavily tied data (#29). P-values now agree with
stats::wilcox.test()to machine precision; on typical count data the change is tiny (< 1e-4), but it is meaningful for binary or heavily tied features. Constant features reportpval = 1instead of an arbitrary value. -
wilcoxauc()andrank_matrix()no longer modify their input in place: dense input used to be silently overwritten with ranks via an aliased memory buffer (#7). DenseavgExprandlogFCare computed from the original values (also #7). - The Seurat dispatcher of
wilcoxauc()uses thelayerargument required by Seurat 5 (#44). -
pseudobulk_within()handles character and multi-level contrast variables. -
pseudobulk_pairwise()no longer fails on single-columnmeta_data. -
collapse_counts()no longer drops a single-columnmeta_datato a vector, which had broken thecollapse_background = TRUEpath ofpseudobulk_deseq2(). -
sumGroups()andnnzeroGroups()accept a character group vectoryagain. A characterypreviously coerced toNAviaas.integer(), producing an out-of-bounds index that crashed on some platforms; the labels are now factored first, andNAlabels raise a clear error. -
summarize_dge_pairs()no longer prints debug output, andpseudobulk_deseq2()no longer warns unconditionally. - Replaced deprecated
.data$tidyselect usage and supersededtidyr::spread()withtidyr::pivot_wider()intop_markers()andtop_markers_dds()(#20).
Performance
- The sparse-input statistics of
wilcoxauc()(transpose, ranking, and all group-wise reductions) are fused into a single-pass C++ kernel, about 12% faster serially before any threading.