gpt4 book ai didi

snakemake - Snakemake 中不同(已知)的输出数量

转载 作者:行者123 更新时间:2023-12-02 23:53:38 30 4
gpt4 key购买 nike

我有一个 Snakemake 规则,适用于数据存档并本质上解压其中的数据。文件包含我在规则开始之前知道的不同数量的文件,因此我想利用它并执行类似的操作

rule unpack:
input: '{id}.archive'
output:
lambda wildcards: ARCHIVE_CONTENTS[wildcards.id]

但我不能在输出中使用函数,这是有充分理由的。但是,我无法想出一个好的替代方案。该规则的运行成本非常高,所以我不能这样做

rule unpack:
input: '{id}.archive'
output: '{id}/{outfile}'

并为每个存档多次运行该规则。另一种选择可能是

rule unpack:
input: '{id}.archive'
output: '{id}/{outfile}'
run:
if os.path.isfile(output[0]):
return
...

但我担心这会引入竞争条件。

dynamic标记规则输出真的是唯一的选择吗?我可以为每个存档自动生成单独的规则,但我还没有找到这样做的方法。

最佳答案

在这里,Snakemake 是普通 Python 的扩展,这一点变得很方便。您可以为每个存档生成单独的规则:

for id, contents in ARCHIVE_CONTENTS.items():
rule:
input:
'{id}.tar.gz'.format(id=id)
output:
expand('{id}/{outfile}', outfile=contents)
shell:
'tar -C {wildcards.id} -xf {input}'

根据这是什么类型的存档,您还可以有一个仅提取所需文件的规则,例如:

rule unpack:
input:
'{id}.tar.gz'
output:
'{id}/{outfile}'
shell:
'tar -C {wildcards.id} -xf {input} {wildcards.outfile}'

关于snakemake - Snakemake 中不同(已知)的输出数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993241/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com