在Nextflow中如何访问及操作splitCsv运算符的输出
问题解决方法
你混淆了两个运算符的作用:branch 是路由运算符,每个输入元素只会进入第一个判定为真的分支,无法实现同一个CSV行拆分后输出到两个不同通道的需求,这里应该使用 multiMap 运算符。
splitCsv 对每一行CSV输入的返回值就是按逗号拆分后的列表对象,直接通过下标取值即可,无需额外做结构转换。
修正后的代码如下:
extracted_values // 如果CSV值两侧有空格,可加strip: true自动清除,按需调整 .splitCsv(strip: true) .multiMap { // 前两个值打包为元组进入meta_data通道 meta_data: new Tuple(it[0], it[1]) // 取从下标2开始到末尾的所有剩余值进入other_data通道 // 如果只有第三个值要单独取,也可以直接写 it[2] other_data: it.drop(2) } .set{ script_output } script_output.meta_data.view({"meta data is $it"}) script_output.other_data.view({"original height is $it"})
可选优化
如果你的CSV有固定字段,可以给 splitCsv 传入表头参数,后续不用记位置下标,代码可读性更高:
extracted_values .splitCsv(header: ['param1', 'param2', 'height', 'other_param']) .multiMap { meta_data: new Tuple(it.param1, it.param2) other_data: it.height } .set{ script_output }
内容的提问来源于stack exchange,提问作者TheCodeNovice
相关产品推荐
相关产品推荐

