Done - skipped estimateDisp() for the QL pipeline and switched to voomLmFit(). Thank you for the guidance. Updated in 81fb89e
We kept running into the same problem: pipelines are in Python, but the stats we needed (edgeR, limma-voom, clusterProfiler) are in R. Writing rpy2 boilerplate for every analysis got old fast, so we built a wrapper library.
pip install rosetta-bioc
edgeR:
from rosetta import edger
results = edger(counts=counts_df, metadata=meta_df, design="~ condition")
limma-voom:
from rosetta import limma_voom
results = limma_voom(counts=counts_df, metadata=meta_df, design="~ batch + condition")
GO enrichment:
from rosetta import enrich_go
go = enrich_go(gene_list=sig_genes, org_db="org.Hs.eg.db")
These call the real R packages (not reimplementations) - results match what you'd get in an R console. Supports contrasts, LFC thresholds, shrinkage, multi-factor designs.
Requires R 4.0+ with the Bioconductor packages installed. MIT licensed. GSoC 2026.
Code: https://github.com/rosetta-bioc/rosetta
Happy to hear feedback or feature requests.
1 answer
For the edgeR QL pipeline, I suggest you get the full benefit of the edgeR v4 speed and functionality by skipping out the:
dge = edger_pkg.estimateDisp(dge, r_design_matrix)
step from your wrapper code. estimateDisp() is by far most time consuming step, and is used only for diagnostic plots in the edgeR v4 QL pipeline.
Omitting estimateDisp() does require a recent version of R that supports edgeR v4, such as 4.5 or 4.6.
For the limma-voom pipeline, I suggest you use the latest version with enhancements, which is called by voomLmFit rather than voom and lmFit.
Log in to answer this question.
This approach is amazing and maybe it is the dawn of a paradigm shift. Why can't we run an already implemented functionality that works in one programming language in any other language ... that used to look impossible but slowly the times are changing.
Python may be the English language of programming.
Thank you so much for your comment, it means the world to me!