README.md

presto

Fast differential expression and marker discovery for single-cell data.

presto is built around two function families:

Both work directly with sparse dgCMatrix input and have dispatchers for Seurat and SingleCellExperiment objects.

Installation

# install.packages("devtools")
devtools::install_github("immunogenomics/presto")

pseudobulk_deseq2() additionally requires DESeq2, which lives in Suggests, so you only need it if you use that feature.

Quick example

library(presto)

## Generate a tiny toy dataset deterministically.
set.seed(42)
exprs <- matrix(rpois(25 * 150, lambda = 2), nrow = 25,
                dimnames = list(paste0("G", 1:25), NULL))
y <- rep(c("A", "B", "C"), each = 50)

res <- wilcoxauc(exprs, y)
head(res)
#>   feature group avgExpr  logFC statistic   auc   pval  padj pct_in pct_out
#> 1      G1     A    2.10  0.200      2740 0.548 0.3264 0.510     86      89
#> 2      G2     A    1.58 -0.560      1896 0.379 0.0137 0.172     84      86
#> 3      G3     A    1.86  0.020      2432 0.486 0.7826 0.893     84      89
#> 4      G4     A    1.96 -0.210      2384 0.477 0.6362 0.884     90      90
#> 5      G5     A    2.00 -0.280      2214 0.443 0.2442 0.505     82      88
#> 6      G6     A    2.26  0.240      2775 0.555 0.2627 0.505     90      83

top_markers() summarises the most distinguishing features per group:

top_markers(res, n = 5, auc_min = 0.5)
#> # A tibble: 5 × 4
#>    rank A     B     C
#>   <int> <chr> <chr> <chr>
#> 1     1 G10   G15   G25
#> 2     2 G24   G13   G5
#> 3     3 G16   G22   G18
#> 4     4 G6    G2    G14
#> 5     5 G7    G20   G2

The same call also works on Seurat and SingleCellExperiment objects:

wilcoxauc(seurat_object, group_by = "cluster")
wilcoxauc(sce_object,    group_by = "cluster")

Walkthroughs

For full examples on a real 25,000-cell single-cell RNA-seq dataset, see:

Performance

A benchmark on 1,000,000 observations × 1,000 features × 10 groups runs in 16 seconds on sparse input and 85 seconds on dense input.



Try the presto package in your browser

Any scripts or data that you put into this service are public.

presto documentation built on Sept. 30, 2026, 5:13 p.m.