我想以与输入相同的顺序从 Nextflow 过程中收集结果。
我知道我可以简单地通过所有流程传递来自所有渠道的值。这将确保对一起传递给所有进程。但是,当您开始添加多个进程时,该解决方案效果不佳,因为它破坏了这些进程并行运行的能力。例如,在提供的示例代码中,如果您要添加一个 add_twenty 进程,然后从 add_ten、add_twenty 和 vals2 收集输出。
我玩过的另一种可能的解决方案是为原始通道中的每个值添加一个键,这实际上将原始通道转换为字典(即哈希)。但我无法让它发挥作用。如有必要,我可以提供一个例子。
我创建了一个玩具示例,其中创建了两个通道,将一个发送到一个进程,然后将处理后的输出和一个原始通道发送到一个新进程。
vals1 = Channel.from(1,2,3,4,5)
vals2 = Channel.from(1,2,3,4,5)
process add_ten {
input:
val(vals1)
output:
val(new_int) into new_vals1
exec:
new_int = vals1 + 10
}
process pair {
echo true
input:
val(new_vals1)
val(vals2)
script:
"""
echo "${new_vals1}, ${vals2}"
"""
}
我希望看到的是这样的数字匹配:
11, 1
12, 2
13, 3
14, 4
15, 5
即使这些线是混乱的,只要对持续存在就可以了。例如,
14, 4
11, 1
13, 3
15, 5
12, 2
但是,我看到的是这样的:
15, 1
13, 2
11, 3
12, 4
14, 5