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

使用Combine和Map时Nextflow流程无输出及样本ID捕获问题

解决方法

先搞定通道无输出的问题

你原代码里的核心问题有两个:

  • 通配符和实际文件名不匹配:样本名是下划线分隔(比如MM_sample1_tumor_R1.fastq.gz),但你写的通配符用了-,根本抓不到文件,导致tumorSamples和normalSamples通道全是空的,后续自然没输出。
  • 样本配对逻辑错了:用combine会把所有肿瘤和正常样本做笛卡尔积乱配对,应该用join按样本ID精准配对。

再捕获sampleid

可以通过fromFilePairs的正则分组,从文件名里提取出MM_sample1这类样本标识。

修正后的完整代码

process align {
    debug true 

    input:
    tuple val(sampleid), path(tumorSamples), path(normalSamples)
    
    output:
    stdout

    script:
    """
    echo "we are all good ${tumorSamples} ${normalSamples} ${sampleid} \\n"
    """
}

workflow {
    // 用正确通配符匹配文件,正则捕获样本核心标识
    tumorSamples = Channel.fromFilePairs(
        '/sc/arion/projects/test_input_data/MM_*_tumor_R{1,2}.fastq.gz',
        by: /MM_(\w+)_tumor/
    ).map { sample_key, tumor_files -> 
        def sampleid = "MM_${sample_key}"
        tuple(sampleid, tumor_files)
    }

    normalSamples = Channel.fromFilePairs(
        '/sc/arion/projects/test_input_data/MM_*_normal_R{1,2}.fastq.gz',
        by: /MM_(\w+)_normal/
    ).map { sample_key, normal_files -> 
        def sampleid = "MM_${sample_key}"
        tuple(sampleid, normal_files)
    }

    // 按sampleid精准配对肿瘤-正常样本
    pairedSamples = tumorSamples.join(normalSamples)

    pairedSamples.view() // 现在能看到配对后的样本数据了
    align(pairedSamples).view()
}

关键修正点

  • 通配符匹配:把原通配符里的-换成_,用R{1,2}匹配双端测序文件,确保能正确抓取到样本。
  • 样本配对:用join替代combine,保证同一个sampleid的肿瘤和正常文件配对,避免无关样本组合。
  • sampleid提取:通过fromFilePairs的by参数定义正则,捕获sample1这类核心标识,再拼接成完整的MM_sample1作为sampleid。
  • 通道结构:确保传给align流程的tuple结构和流程输入定义一致(sampleid + 肿瘤文件 + 正常文件),原代码的map操作丢失了sampleid,导致流程无法接收正确参数。

内容的提问来源于stack exchange,提问作者Death Metal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:39