-
Notifications
You must be signed in to change notification settings - Fork 953
Allow dream to process non-formula contrasts
#9562
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
I think you still need to take the baseline level into account when building contrasts, as done here for DESeq2: modules/modules/nf-core/deseq2/differential/templates/deseq2_differential.R Lines 450 to 457 in 8846461
DESeq2 allows to test contrasts with a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This pull request enables the dream module to handle contrasts without requiring an explicit formula. Previously, dream would fail if no formula was provided; now it automatically generates a formula from the contrast variable and optional blocking variables.
Key Changes:
- Modified the workflow filter to allow
dreamto process contrasts without formulas - Added automatic formula generation logic when no formula is provided
- Added validation for contrast variables and blocking variables
- Updated tests to cover the no-formula scenario
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| subworkflows/nf-core/abundance_differential_filter/main.nf | Removed the formula requirement from the dream inputs filter, allowing processing of non-formula contrasts |
| modules/nf-core/variancepartition/dream/templates/dream.R | Added logic to automatically generate formulas from contrast and blocking variables when no formula is provided, including validation and variable checking |
| modules/nf-core/variancepartition/dream/tests/main.nf.test | Reorganized tests and added a new test case for matrix-based contrasts without formulas |
| modules/nf-core/variancepartition/dream/tests/main.nf.test.snap | Added snapshot for the new no-formula test case |
| modules/nf-core/variancepartition/dream/meta.yml | Updated documentation to indicate formula parameter is now optional instead of mandatory |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
grst
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Getting close!
Can you please add a check that (variable, reference, target) contrasts are not combined with a custom formula? I'd rather have the module fail that doing something incorrect.
| } else if (treatment_target %in% colnames(fitmm\$design)) { | ||
| # Only the target level is present in the design matrix | ||
| # The reference level may have been omitted due to collinearity or being set as the baseline | ||
| # We compare the target level to zero (implicit reference) | ||
| contrast_string <- "" | ||
| coef_name <- paste0(opt\$contrast_variable, opt\$contrast_target) | ||
| cat("Using default contrast matrix:", coef_name, "\n") | ||
|
|
||
| results <- topTable(fitmm, coef = coef_name, number = Inf, | ||
| adjust.method = opt\$adjust.method, p.value = opt\$p.value, | ||
| lfc = opt\$lfc, confint = opt\$confint) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can error in this case?
Perfect colinearity of the factors would show that it is an incorrect model.
Reference level as baseline can't happen if we always create a zero-intercept model.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@pinin4fjords, I'm inclined to keep things simple and avoid possible error sources by making the following options mutually exclusive:
- specify a formula and a constrast_string
- specify a contrast tuple
(variable, baseline, target)andblocking_factors.
I.e. I would raise an error if someone specifies a formula together with a contrast tuple. Does that sound alright to you?
|
So regarding the eBayes, it is necessary to call it after contrasts.fit, according to this example from the limma user guide: It wouldn't be necessary to call it before contrasts.fit, but it doesn't harm. (we still need it if we don't call contrasts.fit at all, but results() directly on the first fit). |
|
I'll defer to @grst on approval for this |
|
ok, then here are my last two requests:
Like that we focus on the usecases we currently need for differentialabundance and keep it simple. |
I will remove the special case now, but I am not sure how to approach the check for the contrast tuple since the script currently uses the I could make the check only for Would the check be necessary if we already have a validation where |
Simplified the construction of contrast_string by removing unnecessary checks for treatment levels in the design matrix.
|
I don't think the relevel or subset to contrast samples should work together with a custom contrast/formula. At the pipeline level, when specifying a formula and a contrast string, contrast variable, target and reference won't be set. You can write the check such that this possibility is excluded. |
|
Okay, I have added the validation so that the module fails when a formula is used together with the contrast tuple. Some of the tests are failing because no explicit reference level is set and therefore no releveling is performed, so sometimes the "target" level is absorbed into the intercept by the default: In this case, genotype (KO) is encoded in the intercept by default and therefore does not exist as a standalone coefficient in the design matrix and cannot be directly referenced in a contrast expression. @grst Do you think this is behavior that users are generally expected to understand and handle themselves? |
|
yes, users are expected to understand how this works if they use formulas and contrast strings. One thing we should consider is how to explicitly set the baseline level of the factors (I believe currently it's the default, i.e. alphabetically). But that's a different topic that we should discuss at the pipeline level first. |
The flagged issues have been fixed, but the "requested changes" status prevents us from merging. Using the "dimiss" feature to keep things going during the Christmas break.
* Allow `dream` to process non-formula contrasts * Add test case without formula * Update `meta.yml` * Fix test with unstable file * Update subworkflow to allow non-formula contrasts with DREAM * Update modules/nf-core/variancepartition/dream/templates/dream.R Co-authored-by: Copilot <[email protected]> * Update modules/nf-core/variancepartition/dream/templates/dream.R Co-authored-by: Copilot <[email protected]> * Correct format of function * Fix contrast building and code flow * Update tests * Modify logic for contrast_string building * Make contrast_string compulsory with formula * Update tests * Refactor contrast_string construction logic Simplified the construction of contrast_string by removing unnecessary checks for treatment levels in the design matrix. * Make formula mutually exclusive to contrast tuple * Modify tests with mutually exclusive varaibles * Revert changes in first test case * Update tests * Fix tests --------- Co-authored-by: Copilot <[email protected]>
* Initial commit * Create one input tuple * Remove bam tests * Update snapshot * Fix formatting * Update meta.yml * Add version to main.nf.test * Run prettier * Add minimac4 imputation subworkfllow (#9451) * Add vcf_impute_minimac4 * Update linting * Update test * Fix linting * Update minimac4 sbwf * Remove tag * Remove tag * Fix linting * Add comment * Update snapshot * Fix nf-test * Add BBSplit stats to MultiQC in fastq_qc_trim_filter_setstrandedness subworkflow (#9559) Add BBSplit stats to MultiQC files in fastq_qc_trim_filter_setstrandedness Pass BBSplit stats output to MultiQC for visualization of read binning statistics. MultiQC 1.33+ includes support for parsing BBSplit stats.txt files and displaying per-sample read distribution across reference genomes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <[email protected]> * Update cutadapt (#9551) * proper stub for gz and stub test added * topic output syntax and tests update * meta yml updated with topics and ontologies * meta file curated * version bump to latest * update nf-tests properly * adding self to maintainers * removed Z flag as is deprecated after v4.10 * conda bug with different pre-built python version fixed * Syntax updates and topic version for manta modules (#9556) * update manta germline * topics convertinversion * topics convertinversion * topics manta/somatic * topics manta/tumoronly * Syntax updates and topics of jasminesv (#9554) syntax updates and topics of jasminesv * Update `Modkit pileup` (#9553) * update yaml * update main.nf * modified test runs * update bedmethyltobigwig tests * update main * update snapshot * fix linting * update snapshots * remove config * update module_args * [automated] Fix linting with Prettier * changed name * update main --------- Co-authored-by: ra25wog <[email protected]> Co-authored-by: nf-core-bot <[email protected]> * Standarize and alignment for all imputation and alignment modules (#9566) * Standarize and alignment * Fix glimpse2 sbwf test * Fix test * Add comment * Update snapshot --------- Co-authored-by: LouisLeNezet <[email protected]> * Update Infrastructural dependencies * Remove .view() (#9567) * Bump strdrop to 0.3.1 (#9565) * Remove unecessary tags (#9568) * Remove .view() * Remove unecessary tags * Update trimgalore (#9570) * testing solo trim-galore container, without adding extra cutadapt and pigz * Syntax updates and topic version for manta modules (#9556) * update manta germline * topics convertinversion * topics convertinversion * topics manta/somatic * topics manta/tumoronly * Syntax updates and topics of jasminesv (#9554) syntax updates and topics of jasminesv * Update `Modkit pileup` (#9553) * update yaml * update main.nf * modified test runs * update bedmethyltobigwig tests * update main * update snapshot * fix linting * update snapshots * remove config * update module_args * [automated] Fix linting with Prettier * changed name * update main --------- Co-authored-by: ra25wog <[email protected]> Co-authored-by: nf-core-bot <[email protected]> * Standarize and alignment for all imputation and alignment modules (#9566) * Standarize and alignment * Fix glimpse2 sbwf test * Fix test * Add comment * Update snapshot --------- Co-authored-by: LouisLeNezet <[email protected]> * Update Infrastructural dependencies * Remove .view() (#9567) * Bump strdrop to 0.3.1 (#9565) * Remove unecessary tags (#9568) * Remove .view() * Remove unecessary tags * latest container, with cutadapt 5.2 * new output syntax, nf-tests updated, meta updated * meta yml lint fixed * trying to fix lint * lint fix with nf-core tools 3.6.0dev * removing TRIMGALORE versions output from the FASTQ_FASTQC_UMITOOLS_TRIMGALORE subworkflow --------- Co-authored-by: Nicolas Vannieuwkerke <[email protected]> Co-authored-by: Jinn <[email protected]> Co-authored-by: ra25wog <[email protected]> Co-authored-by: nf-core-bot <[email protected]> Co-authored-by: Louis Le Nézet <[email protected]> Co-authored-by: LouisLeNezet <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Felix Lenner <[email protected]> * RiboCode - prepare_transcripts, metaplots, ribocode (#9485) * add 3 required ribocode modules * GTFUpdate; meta in inputs; No Gzip; * return snaps * nf-test passing * Update RiboCode versions to use topics * Update RiboCode versions to use topics -New lines at EOF * Update RiboCode versions to use topics - Prettier * RiboCode update snapshots * Update RiboCode snapshots to container versions * Bump to latest ribocode build with pyfasta and ribocode fixes * Improve RiboCode module tests and fix review issues - Remove defaults channel from environment.yml files - Fix keywords to lowercase in meta.yml files - Add stub tests to all modules - Update version snapshots from 1.2.14 to 1.2.15 - Remove duplicate snapshot entries - Optimize test setup using pre-made test data: - metaplots/ribocode: use UNTAR for annotation instead of full setup chain - prepare: use pre-made updated GTF instead of running gtfupdate Temporarily points to test-datasets branch pending merge of: nf-core/test-datasets#1820 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Update RiboCode snapshot to GHA runner architecture Update md5 hashes to match linux/amd64 output from CI runners. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Add schema reference to ribocode/ribocode meta.yml 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * Revert nf-test.config to standard test-datasets paths test-datasets PR #1820 has been merged, reverting to nf-core/test-datasets. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Jonathan Manning <[email protected]> Co-authored-by: Claude Opus 4.5 <[email protected]> * Bump stranger (#9571) * Bump stranger * meta.yaml * linting not happy * linting is happy, but I'm not * pin same python version as used in container * add containers in meta.yml for fastqc and multiqc (#9569) * add containers for fastqc and multiqc * sort containers and add https for singularity * fix build_id naming * some more key names fixing * use underscores * Sort TRGT merge inputs for stable outputs (#9572) * Rseqc add bam index - topics-based versions - version bump (#9546) * Updated rseqc/bamstat: Added BAI support per #9460 & topics-based versions * Updated rseqc/inferexperiment: Added BAI support per #9460 & topics-based versions * Updated rseqc/innerdistance: Added BAI support per #9460 & topics-based versions * Updated rseqc/junctionannotation: Added BAI support per #9460 & topics-based versions * Updated rseqc/junctionsaturation: Added BAI support per #9460 & topics-based versions * Updated rseqc/readdistribution: Added BAI support per #9460 & topics-based versions * Updated rseqc/readduplication: Added BAI support per #9460 & topics-based versions * Updated rseqc/tin: Added topics-based versions * Updated bam_rseqc subworkflow - BAI support, channel syntax fix - topics-based versions * Failed snapshot update - linting error * Snapshot Update & Channel syntax fix * Channel syntax update * Test & Snapshot Updated - version assertion to circumvent nf-core tools potential bug * Fixed null entries in snapshot * Updated subworkflow assertions on optional files (& snapshot) - migration of versions channels to topics * Linting failures fixes - dedicated versions assertions * Add MultiQC routing for seqkit/stats and UMI-tools outputs (#9576) - Add SEQKIT_STATS output to multiqc_files in fastq_remove_rrna (when using ribodetector for rRNA removal) - Add umi_log output to multiqc_files in fastq_qc_trim_filter_setstrandedness for both trimgalore and fastp paths 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <[email protected]> * Update cmaple (#9580) * adding uncompression functionality * new versions output syntax * meta.yml updated * Add fq2bam fq align dd bwamem (#9309) * Added fq2bam * test fix * typo * PE channel * tidying * gpu snap * test fix for snaps * gpu snapshot * PR feedback * tests * cpu snapshot * tests * last snapshot * fix channels * last snapshot * PR feedback * PR feedback * new cpu snapshot * changing test * changing test * new gpu snapshot * [automated] Update gpu snapshot * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * PR feedback * containerOptions back * genome test name * genome test name * wrong comment * fix tests * new snapshot * Add use_gpu channel * new snapshot * [automated] Fix linting with Prettier * fix lint * Remove containerOptions --------- Co-authored-by: root <[email protected]> Co-authored-by: root <[email protected]> Co-authored-by: nf-core-bot <[email protected]> Co-authored-by: Joon Klaps <[email protected]> Co-authored-by: Eduard Casas <[email protected]> * Update RSEQC modules with Seqera Wave containers matching environment.yml (#9588) Replace biocontainers with Seqera Wave containers built from the exact environment.yml specifications. This ensures conda and container environments match. Key changes: - Pin r-base=4.3 in all RSEQC environment.yml files (r-base=3.5 has no ARM build available) - Use Wave-generated containers built from environment.yml for both Docker and Singularity - Standardize all 9 RSEQC modules to use identical dependencies The previous biocontainers (rseqc:5.0.4--pyhdfd78af_1) were not built with the R pin specified in environment.yml, causing inconsistency between conda and container execution modes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.5 <[email protected]> * Allow gzipped inputs to modkit/bedmethyltobigwig (#9591) * Allow gzipped inputs to modkit/bedmethyltobigwig * Update modules/nf-core/modkit/bedmethyltobigwig/main.nf Co-authored-by: Felix Kummer <[email protected]> * harshil --------- Co-authored-by: Felix Kummer <[email protected]> * Fix modkit pileup stub (#9590) * feat(ribowaltz): Export underlying data from QC plots (#9593) * feat(ribowaltz): Export underlying data from QC plots Add TSV export for data underlying P-site region and frame distribution plots. This makes the raw data available for downstream analysis and reporting tools like MultiQC. Changes: - Export psite_region.tsv from region_psite() in save_psite_region_plot - Export frames.tsv from frame_psite() in save_frame_plots - Export frames_stratified.tsv from frame_psite_length() in save_frame_plots - Add ribowaltz_qc_data output channel for TSV files - Update stub outputs to include new TSV files - Add test assertions for new output channel 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * chore(ribowaltz): Update meta.yml with ribowaltz_qc_data output 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]> * feat(ribowaltz): Export underlying data for all QC plots (#9594) * feat(ribowaltz): Export underlying data for all QC plots Add TSV data exports for all riboWaltz QC plots to enable downstream processing and MultiQC custom content integration: - length_bins_for_psite.tsv (P-site offset identification bins) - ends_heatmap.tsv (read extremities heatmap) - codon_usage.tsv (codon usage barplot) - length_distribution.tsv (read length distribution) - metaprofile_psite.tsv (P-site metaprofile around start/stop codons) These complement existing exports (psite_region, frames, frames_stratified). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> * fix(ribowaltz): Use correct key for ends_heatmap data export The rends_heat function returns data in 'count_dt' not 'dt'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]> --------- Co-authored-by: Claude Opus 4.5 <[email protected]> * chore(deps): update conda-incubator/setup-miniconda digest to 8352349 * Swap bcftools/mpileup to topic (#9596) * Swap bcftools/mpileup to topic * Fix linting * Update snapshots * Swap mpileup to topics (#9595) * Swap mpileup to topics * Apply suggestions from code review * Add Harshil back as author * Update snapshots * Fix string path (#9602) * Fix string path * Update subworkflows/nf-core/vcf_impute_beagle5/main.nf Co-authored-by: Felix Lenner <[email protected]> --------- Co-authored-by: Felix Lenner <[email protected]> * Bump genmod to 3.10.2 and switch to topics (#9603) * Bump genmod to 3.10.2 and switch to topics * Add md5sum for stable subcommands * Update the FASTP output file names to match "R1/R2" naming conventions (#9606) * Modify output files in FASTP module to use 'R1' and 'R2' conventions rather than just '1' or '2' * Update testing snapshots --------- Co-authored-by: Tatiana Gelaf Romer <[email protected]> * Update MLST from 2.23 to 2.25 (#9604) * Update MLST from 2.23 to 2.25 * test: update snapshots for mlst 2.25 --------- Co-authored-by: Subham Verma <[email protected]> * Update GitHub PR template check list item - version numbers (#9586) Update PR template check list item WRT version numbers Updating the PR template per the blog: ``` We are adopting topic channels to replace the versions.yml. For now both options are valid, but this will change. No more mixing of version channels. ``` Co-authored-by: Simon Pearce <[email protected]> * Ngscheckmate topics (#9597) * Start of topics conversion * Swap ngscheckmate to topic * Remove trailing whitespace * Update snapshots * Update test * Update snapshots * Skip two submodules on conda * Address comments * Update snapshot * Update snapshot --------- Co-authored-by: Louis Le Nézet <[email protected]> * Migrate samtools dict/faidx/merge to topics (#9598) * Update samtools dict/faidx/merge * Update subworkflows * Update meta * Update snapshots * Prettier * Add config back * Add config * Prettier * Allow `dream` to process non-formula contrasts (#9562) * Allow `dream` to process non-formula contrasts * Add test case without formula * Update `meta.yml` * Fix test with unstable file * Update subworkflow to allow non-formula contrasts with DREAM * Update modules/nf-core/variancepartition/dream/templates/dream.R Co-authored-by: Copilot <[email protected]> * Update modules/nf-core/variancepartition/dream/templates/dream.R Co-authored-by: Copilot <[email protected]> * Correct format of function * Fix contrast building and code flow * Update tests * Modify logic for contrast_string building * Make contrast_string compulsory with formula * Update tests * Refactor contrast_string construction logic Simplified the construction of contrast_string by removing unnecessary checks for treatment levels in the design matrix. * Make formula mutually exclusive to contrast tuple * Modify tests with mutually exclusive varaibles * Revert changes in first test case * Update tests * Fix tests --------- Co-authored-by: Copilot <[email protected]> * Add vcfpgloader/load module (#9579) * Add vcfpgloader/load module High-throughput VCF to PostgreSQL loader using asyncpg for bulk variant ingestion. * Remove throughput metric from meta.yml description * fix(vcfpgloader): fix CI failures for conda, singularity, and docker - Add pip as explicit conda dependency in environment.yml - Simplify container directive (remove oras:// for singularity compatibility) - Remove integration test requiring PostgreSQL database 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * chore: re-trigger CI for bioconda 0.5.3 propagation * chore: reorder deps to bust conda cache for 0.5.3 * fix: specify exact bioconda build string to force 0.5.3 * chore: sort environment.yml dependencies (linter) * fix: remove version from snapshot (varies by profile) * fix(vcfpgloader): restore version checking in tests Add back versions to snapshot assertions and update snapshot file with expected version output format for lint compliance. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * fix(vcfpgloader): use correct findAll pattern for topic versions Use process.out.findAll { key, val -> key.startsWith("versions")} pattern for topic-based versioning, matching nf-core conventions. Update snapshot with versions_vcfpgloader object format. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * feat(vcfpgloader): bump to v0.5.4 - Update environment.yml to bioconda::vcf-pg-loader=0.5.4 - Update container to ghcr.io/zacharyr41/vcf-pg-loader:0.5.4 - Add sed to parse version number from --version output - Update snapshot for 0.5.4 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * ci: retrigger after bioconda 0.5.4 merge * fix(vcfpgloader): update meta.yml version format Add type: eval and description to version command entries in outputs and topics sections. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]> * style(vcfpgloader): apply nextflow lint formatting * fix(vcfpgloader): add export to env() output variables Add explicit `export` to ROWS_LOADED assignments as recommended for env() output qualifiers. Note: `nextflow lint` still reports false positive errors for env() outputs - this is a known limitation of static analysis on shell scripts. The linter cannot verify variable definitions inside heredoc script blocks. Other nf-core modules (e.g., genescopefk) have the same lint warning. The code functions correctly at runtime. * Update modules/nf-core/vcfpgloader/load/tests/nextflow.config Co-authored-by: Famke Bäuerle <[email protected]> * chore(vcfpgloader): remove unused tags.yml * Update modules/nf-core/vcfpgloader/load/tests/main.nf.test Co-authored-by: Famke Bäuerle <[email protected]> * Update modules/nf-core/vcfpgloader/load/tests/main.nf.test Co-authored-by: Famke Bäuerle <[email protected]> * refactor(vcfpgloader): consolidate inputs into single tuple * feat(vcfpgloader): switch to BioContainers - Use BioContainers URLs instead of personal ghcr.io - Remove jq dependency, use Python for JSON parsing - Fix sed quoting for nf-core lint compatibility 🤖 Generated with [Claude Code](https://claude.ai/code) * fix(vcfpgloader): update snapshots to include row_count output Add missing row_count and log outputs to test snapshots to match the process outputs being asserted in tests. --------- Co-authored-by: Claude <[email protected]> Co-authored-by: Zachary Rothstein <[email protected]> Co-authored-by: Famke Bäuerle <[email protected]> * Replace busybox with coreutils sort for genmod modules (#9610) Replace busybox with coreutils sort * Add error message * Update version * Fix output capture * Update tests * Update singularity container * Use https protocol --------- Co-authored-by: Louis Le Nézet <[email protected]> Co-authored-by: Jonathan Manning <[email protected]> Co-authored-by: Claude Opus 4.5 <[email protected]> Co-authored-by: Evangelos Karatzas <[email protected]> Co-authored-by: Nicolas Vannieuwkerke <[email protected]> Co-authored-by: Jinn <[email protected]> Co-authored-by: ra25wog <[email protected]> Co-authored-by: nf-core-bot <[email protected]> Co-authored-by: LouisLeNezet <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Felix Lenner <[email protected]> Co-authored-by: Jack Tierney <[email protected]> Co-authored-by: Júlia Mir Pedrol <[email protected]> Co-authored-by: Rayan Hassaïne <[email protected]> Co-authored-by: Eduard Casas <[email protected]> Co-authored-by: root <[email protected]> Co-authored-by: root <[email protected]> Co-authored-by: Joon Klaps <[email protected]> Co-authored-by: Eduard Casas <[email protected]> Co-authored-by: Felix Kummer <[email protected]> Co-authored-by: Simon Pearce <[email protected]> Co-authored-by: Tatiana Gelaf Romer <[email protected]> Co-authored-by: Tatiana Gelaf Romer <[email protected]> Co-authored-by: Shubham Verma <[email protected]> Co-authored-by: Subham Verma <[email protected]> Co-authored-by: PeterKnealeCMRI <[email protected]> Co-authored-by: Delfina Terradas <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: Zacharyr41 <[email protected]> Co-authored-by: Zachary Rothstein <[email protected]> Co-authored-by: Famke Bäuerle <[email protected]>

PR checklist
Closes nf-core/differentialabundance#578
versions.ymlfile.labelnf-core modules test <MODULE> --profile dockernf-core modules test <MODULE> --profile singularitynf-core modules test <MODULE> --profile condanf-core subworkflows test <SUBWORKFLOW> --profile dockernf-core subworkflows test <SUBWORKFLOW> --profile singularitynf-core subworkflows test <SUBWORKFLOW> --profile conda