Nextflow - 如何避免使用 "Join"或类似运算符的两个或多个 channel 中的输入文件的随机样本 ID?

标签 nextflow

我已经使用 Nextflow 实现了一些 NGS 数据分析工作流程。我在一些工作流程中使用了“Paired End” channel (fromFilePairs 方法)。在多次工作流程执行后,我遇到了一个意想不到的问题:我的样本 ID 有时会混合,导致发生该情况的流程输出不准确。我认为这与非确定性输入 channel 问题 ( 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(=我的样本名称)可能会混合,我的过程最终将使用随机输入文件A和Bsample1 的 em> 和 sample2输入文件 C,而不是所有文件(A、B、C) 相同的pair_ID( key =仅sample1或仅sample2)。 在多次工作流程执行之后、在发生错误时使用 -resume 以及在工作流程完全成功运行之后,我遇到了随机混合输入文件名问题(这影响了输出)。

为了在 3 个 channel 中每个 channel 发出的输入文件之间具有相同的 key (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 channel 使用,所以我不确定我是否正确地将它用于 3 channel 。

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

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

最佳答案

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

要使用公用 key 加入两个或多个 channel ,您只需使用 join operator :

join

The join operator creates a channel that joins together the items emitted by two channels for which exits a matching key. The key is defined, by default, as the first element in each item emitted.

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

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

功能上与以下相同:

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

关于Nextflow - 如何避免使用 "Join"或类似运算符的两个或多个 channel 中的输入文件的随机样本 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63940197/

相关文章:

python-3.x - nextflow 没有找到我所有的 python 模块

nextflow - 如何根据映射到染色体的读取将bam文件拆分为单独的bams

nextflow - 如何在不指定绝对路径的情况下使用文件脚本?

bash - Nextflow:我应该如何在第 X 行截断 fastq 文件?进程失败并出现错误 141

directed-acyclic-graphs - 你能让 Nextflow DAG 可视化变得漂亮吗?

nextflow - 收集多个文件作为 nextflow 流程的输出并创建一个新队列

bioinformatics - 如何在 Nextflow 中将一个进程的一个输出传递到另一进程?

nextflow - 使用命令行参数覆盖 Nextflow 参数

nextflow - 在 nextflow 中将多个输出 block 合并到一个文件