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