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

Groovy Transpose输出指定:cDNA流程中ID与fastq文件正确关联

解决ID与Fastq文件的正确关联问题

问题核心是transpose仅按数组位置配对,而你的元数据数组和Fastq文件数组的顺序不匹配,因此需要基于ID字符串匹配来关联,而非位置索引。以下是具体实现步骤(基于Nextflow,适配你使用的Channel和transpose操作场景):

步骤1:拆分并展开原始Channel的数组元素

首先将原始Channel中包含的元数据数组和Fastq文件数组分别展开为单个元素的Channel:

// 假设你的原始输入Channel名为input_ch
def meta_entries = input_ch.map { meta_list, fastq_list -> meta_list }.flatten()
def fastq_files = input_ch.map { meta_list, fastq_list -> fastq_list }.flatten()

步骤2:为每个元素提取匹配用的ID

从元数据中提取ID

元数据项格式为[id:L5ad_T1, single_end:true],直接提取其中的id字段:

def meta_with_id = meta_entries.map { entry ->
    def match_id = entry.id  // 直接获取元数据中的ID值
    [match_id, entry]
}

从Fastq文件名中提取对应ID

Fastq文件名格式如/flexbar_trimmed_NNNCGCTTAGC_L5ad.fastq,用正则表达式提取文件名中与元数据ID匹配的部分(补全_T1以匹配元数据ID格式):

def fastq_with_id = fastq_files.map { file ->
    // 正则匹配文件名末尾的_Lxxx.fastq部分,提取xxx并拼接成Lxxx_T1格式
    def id_match = file.name =~ /_L([a-zA-Z0-9]+)\.fastq$/
    def match_id = id_match ? "L${id_match[0][1]}_T1" : null
    [match_id, file]
}

步骤3:通过ID关联元数据与Fastq文件

使用Nextflow的join操作,基于提取的match_id将两个Channel配对:

def correctly_paired = meta_with_id.join(fastq_with_id)

验证结果

此时correctly_paired中的每个元素即为你需要的正确关联对,例如:

[[id:L5ad_T1, single_end:true], /flexbar_trimmed_NNNCGCTTAGC_L5ad.fastq]

关键说明

  • transpose仅适用于两个数组顺序完全对应的场景,当顺序不匹配时必须使用基于键(这里是ID)的关联操作。
  • 正则表达式需根据你的实际文件名格式调整,确保能准确提取与元数据ID匹配的字符串。

内容的提问来源于stack exchange,提问作者Connor Hudson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:31