2

我已经使用 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
...
}

对于这种以多个“元组 pair_ID”作为输入的过程,数据 pair_ID(= 我的样本名称)可能会混淆,我的过程最终会使用sample1的随机输入文件 A 和 B以及输入文件sample2 的C而不是相同 pair_ID所有文件 (A,B,C)(key = only sample1 或 only 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。

提前谢谢您,如果有不清楚的地方,请不要犹豫!

4

1 回答 1

3

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

要使用公共密钥加入两个或多个频道,您可以简单地使用join 运算符

加入

连接运算符创建一个通道,将两个通道发出的项目连接在一起,并为其退出匹配键。默认情况下,键被定义为每个发出的项目中的第一个元素。

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

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

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

temp = channelA.join(channelB)
joined = temp.join(channelC)
于 2020-09-21T00:09:33.897 回答