【发布时间】:2020-04-06 23:07:00
【问题描述】:
根据 Snakemake 中更改的输入文件生成输出很容易:
rule all:
input: [f'out_{i}.txt' for i in range(10)]
rule make_input:
output: 'in_{i}.txt'
shell: 'touch {output}'
rule make_output_parallel:
input: 'in_{i}.txt'
output: 'out_{i}.txt'
shell: 'touch {output}'
在这种情况下,make_output 只会在 in_{i}.txt 发生变化的情况下运行。
但假设 'out_{i}.txt' 不能并行生成,我想一步生成它们,例如,
rule make_output_one_step:
input: [f'in_{i}.txt' for i in range(10)]
output: [f'out_{i}.txt' for i in range(10)]
shell: 'touch {output}'
如果只有一个 in_{i}.txt 文件发生了变化,我不需要重新生成全部 10 个。
如何调整make_output_one_step.output 以仅生成需要的文件?
【问题讨论】:
-
make_output和all都不依赖于任何 in_{i}.txt 文件。您的脚本中没有“根据更改的输入文件生成输出”。 -
哎呀,你是对的。进行了编辑以使其更清晰。
-
你的意图不明确。首先,
make_output中的脚本实际上并不依赖于输入。接下来,make_input生成完全相同的文件,因此事实上的时间戳并不重要。最后,我没有看到您打算“一步生成它们”的任何理由。我看到了一个逻辑谬误。 -
您可以设置最大并行资源。
-
@DmitryKuzminov,这只是一个简单的例子,而不是我的用例。我不知道你指的是什么“逻辑谬误”——你能澄清一下吗?
标签: snakemake