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

如何移除Nextflow channel.fromFilePairs()输出Map键中的_L001_R?

解决Nextflow channel.fromFilePairs()的键名修改问题

问题描述

使用channel.fromFilePairs()时,默认生成的键包含冗余部分:

params.reads = "/path/to/my_reads/sample03_L001_R{1,2}_001.fastq.gz"
my_reads_ch = channel.fromFilePairs(params.reads)

输出的键为sample03_L001_R,期望将键修改为sample03(移除_L001_R部分)。

错误原因

尝试用it[0] - /_\w+/修改键名时报错ERROR: Unknown method invocation 'negative' on Pattern type,是因为Groovy中没有定义字符串与正则表达式的减法操作。/_\w+/是Pattern对象,减号操作被解析为调用Pattern的negative()方法,但该方法不存在。

解决方法

可以通过字符串的replaceAll()或split()方法处理键名,以下是两种可行方案:

方案1:使用replaceAll()移除冗余后缀

通过正则匹配并替换掉第一个下划线后的所有内容,适合通用场景:

params.reads = "/path/to/my_reads/sample03_L001_R{1,2}_001.fastq.gz"

my_reads_ch = channel.fromFilePairs(params.reads)
    .map { raw_id, reads ->
        // 移除第一个下划线后的所有字符,保留前缀作为样本ID
        def clean_id = raw_id.replaceAll(/_.*/, '')
        [clean_id, reads]
    }

// 验证结果
my_reads_ch.view()

方案2:使用split()分割字符串取前缀

如果文件名格式固定(下划线分隔),可以直接分割取第一个元素:

params.reads = "/path/to/my_reads/sample03_L001_R{1,2}_001.fastq.gz"

my_reads_ch = channel.fromFilePairs(params.reads)
    .map { raw_id, reads ->
        // 按下划线分割,取第一个部分作为样本ID
        def clean_id = raw_id.split('_')[0]
        [clean_id, reads]
    }

// 验证结果
my_reads_ch.view()

两种方案最终都会输出期望的结果:[sample03, [/path/to/my_reads/sample03_L001_R1_001.fastq.gz, /path/to/my_reads/sample03_L001_R2_001.fastq.gz]]

内容的提问来源于stack exchange,提问作者Samuel Morrison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:23:18