首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RNA-seq示例工作流中的nextflow .collect()方法

RNA-seq示例工作流中的nextflow .collect()方法
EN

Stack Overflow用户
提问于 2021-06-26 00:26:52
回答 1查看 65关注 0票数 1

我知道当我们运行一个以两个通道为输入的进程时,我们必须使用collect(),其中第一个通道有一个元素,然后第二个通道有>1个元素:

代码语言:javascript
复制
#! /usr/bin/env nextflow

nextflow.enable.dsl=2

process A {

    input:
    val(input1)

    output:
    path 'index.txt', emit: foo

    script:
    """
    echo 'This is an index' > index.txt
    """
}

process B {

    input:
    val(input1)
    path(input2)

    output:
    path("${input1}.txt")

    script:
    """
    cat <(echo ${input1}) ${input2} > \"${input1}.txt\"
    """
}

workflow {

    A( Channel.from( 'A' ) )

    // This would only run for one element of the first channel:
    B( Channel.from( 1, 2, 3 ), A.out.foo )

    // and this for all of them as intended:
    B( Channel.from( 1, 2, 3 ), A.out.foo.collect() )

}

现在的问题是:为什么在不使用collect()toList()的情况下,来自nextflow-io (https://github.com/nextflow-io/rnaseq-nf/blob/master/modules/rnaseq.nf#L15)的示例工作流中的这一行可以工作

同样的情况,具有一个元素(索引)的通道和具有>1的通道( fastq对)将由相同的进程(定量)使用,并且它在所有fastq文件上运行。与我的虚拟示例相比,我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-26 04:04:10

您需要使用value工厂创建第一个通道,该工厂永远不会耗尽通道。

您的链接示例implicitly creates a value channel,这就是它工作的原因。在A.out.foo上调用.collect()时也会发生同样的情况。

Channel.from (或更现代的Channel.of)创建了一个可能会耗尽的序列通道,这就是为什么AB都只运行一次。

所以

代码语言:javascript
复制
A( Channel.value('A') )

就是你所需要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68134271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档