如何过滤Nextflow通道中的嵌套元组列表,仅保留Type1元组?
Nextflow嵌套元组列表筛选方案
你的问题核心是混淆了.filter()和.map()的作用:.filter()负责保留/丢弃整个通道元素,没法修改元素内部结构;而你需要的是修改元组里的嵌套列表,只保留Type1的子元组,这得用.map()来实现。
分两种场景给出实现:
场景1:嵌套列表是单层结构
如果你的元组格式是:
[ID, [[Type1, file, file], [Type2, file, file], ...]]
直接对第二个列表元素做筛选即可:
your_channel.map { id, type_list -> // 筛选出所有第一个元素为Type1的子元组 def filtered_types = type_list.findAll { item -> item[0] == 'Type1' } // 重新构造元组 [id, filtered_types] }
场景2:嵌套列表是多层结构
如果你的元组存在深层嵌套,比如:
[ID, [[Type1, file, file], [[Type2, file, file], [Type1, file, file]], ...]]
先通过.flatten()扁平化嵌套列表,再筛选:
your_channel.map { id, nested_type_list -> // 扁平化所有嵌套层级,再筛选Type1的子元组 def filtered_types = nested_type_list.flatten().findAll { item -> item[0] == 'Type1' } [id, filtered_types] }
效果验证
处理后你会得到期望的格式:
[ID, [[Type1, file, file], [Type1, file, file], ...]]
内容的提问来源于stack exchange,提问作者AggresiveHayBale
相关产品推荐
相关产品推荐

