Fast Functions for Differential Expression Using Wilcoxon and AUC
Overview
Scalable implementation of the Wilcoxon rank sum test and the area under the receiver operating characteristic curve (also known as auROC or AUC) statistic. Interfaces to dense and sparse matrices, as well as the genomics analysis frameworks 'Seurat' and 'SingleCellExperiment'.
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.
Show all changes in 1.1.0Hide the rest of the changes in 1.1.0
- 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.
From NEWS.md in the release
Install
Health
- OK13 OKNow
- OK5 OK2026-10-01
Documentation
- Help pages
- 17 (2 internal)includes a package overview page
- Examples that run
- 90%9 run in a plain check (2 of them under a condition) · 1 only when donttest examples are enabled (R CMD check --as-cran)
- Exported functions with examples
- 63%
- Documented parameters
- 100%
- Return-value docs
- 100%
- Help pages citing references
- 0%
Downloads
Dependencies
Installing presto adds 23 packages (15 with compiled code, 26 MB of source tarballs). Heaviest: stringi 11 MB, data.table 5.7 MB, Rcpp 1.8 MB.
Code & Tests
People & History
- 1.1.0Latest2026-09-30 · current release
- RR 4.6.0 released · 2026-04-24
Package metadata
- First published
- 2026-09-30
- Total releases
- 1 / 1 yrs
- License
- GPL-3 OSI
- Minimum R
- ≥ 3.5.0
- Download size
- 72 KB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("presto")This package has no citation file, so citation() returns this entry built from DESCRIPTION.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-25, which the citation names so these numbers can be found later. More on citing and the projects behind them.