Nextflow-如何避免使用“ Join”或类似运算符在两个或更多通道中为输入文件提供随机样本ID?

时间:2020-09-17 14:25:04

标签: nextflow

我已经用Nextflow实现了一些NGS数据分析工作流。在某些工作流程中,我使用了“配对结束”通道(fromFilePairs方法)。在执行多个工作流程后,我遇到了一个我没想到的问题:我的样本ID有时会混杂在一起,导致发生它的过程的输出不准确。我认为这与不确定输入通道问题https://www.nextflow.io/blog/2019/troubleshooting-nextflow-resume.html)有关。

假设我将我的工作应用到这些成对的末端文件:sample1_R {1,2} .fastq,sample2_R {1,2} .fastq

process Step1 {
    input:
        tuple pair_ID, file(A) from channelA
        tuple pair_ID, file(B) from channelB
        tuple pair_ID, file(C) from channelC
...
}

对于这种具有多个“ tuple pair_ID”作为输入的过程,可以将数据对_ID(=我的样本名称)混合起来,最终我的过程将使用随机的输入文件A和B sample1 的em>和 sample2 输入文件C 而不是所有文件(A,B,C)< / em> pair_ID 相同(键=仅sample1或仅sample2)。 在执行几个工作流程之后,使用-resume发生错误以及运行成功的完整工作流程之后,我遇到了随机混合的输入文件名问题(影响了输出)。

为了使3个通道中的每个通道发出的输入文件之间具有相同的键(pair_ID),我使用了join运算符:

Process Step1 {
    input:
        tuple pair_ID, file(A), file(B), file(C) from channelA.join(channelB).join(channelC)
...
}

此运算符似乎可以使所有功能正常运行,我在示例ID和最终输出中看不到任何混淆。在文档(https://www.nextflow.io/docs/latest/operator.html?highlight=join#join)中,join似乎仅适合2个通道使用,因此我不确定我是否正确地将其用于3个通道。

我的方法是否使用join合法?还是还有一些缺陷? 是否有更好的方法来纠正我的问题? 如果我不确定此方法是否正确,可以避免样品ID中出现任何混淆,则可以更改为其他工作流管理系统,例如Snakemake,但我真的很想解决此问题并继续使用Nextflow。

在此先感谢您,如果有不清楚的地方不要犹豫!

1 个答案:

答案 0 :(得分:2)

您已经发现,应该避免在输入块中多次使用相同的变量名(pair_ID)。使用相同的变量名不能保证使用此键将输入连接在一起。我想像一下,无论您从一个输入通道获得的pair_ID值是多少,都会被您从其他输入通道之一获得的pair_ID所掩盖。您还发现,当声明两个或多个输入通道时,整个输入顺序在多个执行之间可能不一致(例如,使用-resume时)。

要使用公共密钥加入两个或多个频道,只需使用join operator

加入

join运算符创建一个将各项结合在一起的通道 由两个通道发出,并为其退出匹配键。关键是 默认情况下定义为发射的每个项目中的第一个元素。

请注意,join运算符创建(返回)一个新通道。因此,这:

joined = channelA.join(channelB).join(channelC)

在功能上与以下内容相同:

temp = channelA.join(channelB)
joined = temp.join(channelC)