Nextflow管道报into方法不适用错误,疑文件未找到如何解决?
Nextflow管道
into() 方法报错解决方案 错误信息
ERROR ~ No signature of method: groovyx.gpars.dataflow.DataflowBroadcast.into() is applicable for argument types: (Script_dd34529ec87c0dd2$_runScript_closure3) values: [Script_dd34529ec87c0dd2$_runScript_closure3@39652a30] Possible solutions: any(), find(), bind(java.lang.Object), print(java.io.PrintWriter), find(groovy.lang.Closure), any(groovy.lang.Closure)
引发错误的代码段
Channel .fromFilePairs("$root/**/*.trk", size: -1) { it.parent.name } .into{ tractogram; tractogram_for_check } // [sid, tractogram.trk]
问题分析
这个错误和文件是否存在无关——into()方法不支持DataflowBroadcast类型的通道。当fromFilePairs使用size: -1参数时,返回的是广播通道,而标准into()仅适用于普通DataflowChannel。
解决方案
方案1:移除广播通道配置(推荐,若无需广播特性)
删除size: -1参数,让fromFilePairs返回普通通道,into()即可正常工作:
Channel .fromFilePairs("$root/**/*.trk") { it.parent.name } .into{ tractogram; tractogram_for_check }
方案2:保留广播通道,改用订阅方式
如果必须使用广播通道(需将同一数据发送给多个下游进程),可通过subscribe分别处理两个通道逻辑:
def tractogram_broadcast = Channel .fromFilePairs("$root/**/*.trk", size: -1) { it.parent.name } // 处理tractogram通道逻辑 tractogram_broadcast.subscribe { tuple -> // 这里写对应tractogram的处理代码 } // 处理tractogram_for_check通道逻辑 tractogram_broadcast.subscribe { tuple -> // 这里写对应tractogram_for_check的处理代码 }
方案3:直接复用广播通道变量
广播通道本身支持被多个进程消费,可直接将其赋值给两个变量:
def tractogram = Channel .fromFilePairs("$root/**/*.trk", size: -1) { it.parent.name } def tractogram_for_check = tractogram
内容的提问来源于stack exchange,提问作者Bar29
相关产品推荐
相关产品推荐

