You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nextflow流程块中使用双变量循环调用fastp工具?

解决Nextflow中循环处理双端测序数据的fastp调用问题

你不需要在process里重复编写fastp命令,Nextflow的通道(Channel)和输入绑定机制可以优雅实现批量处理。下面提供两种常用的优化方案:

方式1:手动指定样本ID列表(适合样本数量少、ID已知的场景)

#!/usr/bin/env nextflow
nextflow.enable.dsl=2

// 定义需要处理的样本ID集合
def sample_ids = ['SRR19573234', 'SRR19573260']
// 创建样本ID通道,每个元素对应一个样本
Channel.fromList(sample_ids).set { samples_ch }

workflow {
    FASTP(samples_ch)
}

process FASTP {
    // 接收样本ID输入
    input:
        val sample_id from samples_ch

    // 定义输出文件,让Nextflow自动跟踪管理
    output:
        file "trimmed_${sample_id}_R1.fastq" into trimmed_R1_ch
        file "trimmed_${sample_id}_R2.fastq" into trimmed_R2_ch
        file "trimmed_${sample_id}.fastp.html" into report_ch

    // 动态生成fastp执行命令
    script:
    """
    fastp \
        --in1 ${baseDir}/sequences/sequences_split/${sample_id}_R1.fastq \
        --in2 ${baseDir}/sequences/sequences_split/${sample_id}_R2.fastq \
        --out1 trimmed_${sample_id}_R1.fastq \
        --out2 trimmed_${sample_id}_R2.fastq \
        --html trimmed_${sample_id}.fastp.html
    """

    // 将结果发布到指定目录
    publishDir "${baseDir}/sequences/sequences_split/sequences_trimmed", mode: 'copy', pattern: "trimmed_*_R*.fastq"
    publishDir "${baseDir}/results", mode: 'copy', pattern: "*.fastp.html"
}

方式2:自动匹配双端文件(适合样本多、命名规范的场景)

如果你的测序文件命名遵循规范(比如*_R1.fastq和*_R2.fastq成对),可以用fromFilePairs自动识别样本对,无需手动罗列ID:

#!/usr/bin/env nextflow
nextflow.enable.dsl=2

// 自动匹配指定目录下的双端文件,自动提取样本ID(如SRR19573234_R1.fastq → SRR19573234)
Channel.fromFilePairs("${baseDir}/sequences/sequences_split/*_R{1,2}.fastq")
    .set { sample_pairs_ch }

workflow {
    FASTP(sample_pairs_ch)
}

process FASTP {
    // 接收样本ID和对应的R1、R2文件
    input:
        tuple val(sample_id), path(reads)  // reads是包含R1、R2的文件列表

    // 定义输出文件
    output:
        file "trimmed_${sample_id}_R1.fastq" into trimmed_R1_ch
        file "trimmed_${sample_id}_R2.fastq" into trimmed_R2_ch
        file "trimmed_${sample_id}.fastp.html" into report_ch

    script:
    // 从文件列表中取出R1和R2文件
    def r1 = reads[0]
    def r2 = reads[1]

    """
    fastp \
        --in1 ${r1} \
        --in2 ${r2} \
        --out1 trimmed_${sample_id}_R1.fastq \
        --out2 trimmed_${sample_id}_R2.fastq \
        --html trimmed_${sample_id}.fastp.html
    """

    // 发布结果到目标目录
    publishDir "${baseDir}/sequences/sequences_split/sequences_trimmed", mode: 'copy', pattern: "trimmed_*_R*.fastq"
    publishDir "${baseDir}/results", mode: 'copy', pattern: "*.fastp.html"
}

核心要点说明

  • 通道机制:每个样本会触发一次process执行,Nextflow默认会根据CPU核心数实现并行处理,大幅提升效率。
  • 动态参数:通过sample_id变量自动生成输入输出路径,新增样本只需修改ID列表(方式1)或保证文件命名规范(方式2),无需重复编写命令。
  • publishDir:用于指定结果的最终存储位置,mode: 'copy'会将工作目录中的结果复制到目标目录,避免工作目录清理后丢失文件。

内容的提问来源于stack exchange,提问作者Michael Yoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:05:41