Snakemake 处理变量输入数据集

问题描述 投票:0回答:1

我刚刚开始使用 Snakemake,我无法理解通配符。我的工作流程将有一个具有以下结构的输入数据目录:

data/
├─ somedataset/
│  ├─ somesubset.csv
│  ├─ someothersubset.csv
├─ seconddataset/
│  ├─ somesubsetofsecond.csv
│  ├─ yetanothersubset.csv
│  ├─ andyetanothersubset.csv

如果没有在我的配置中指定可能的数据集和子集,我希望拥有下面的输出结构。因此,每个输入子集都会被接收输入文件列表的脚本分割成固定数量的分区。

output/
├─ somedataset/
│  ├─ somesubset_01.csv
│  ├─ somesubset_02.csv
│  ├─ someothersubset_01.csv
│  ├─ someothersubset_02.csv
├─ seconddataset/
│  ├─ somesubsetofsecond_01.csv
│  ├─ somesubsetofsecond_02.csv
│  ├─ yetanothersubset_01.csv
│  ├─ yetanothersubset_02.csv
│  ├─ andyetanothersubset_01.csv
│  ├─ andyetanothersubset_02.csv

如何使用通配符实现此目的?我已经尝试过这个例子:

wildcard_constraints:
    dataset=r"\w+",
    subset=r"\w+"


rule test:
    input:
        "data/{dataset}/{subset}.csv"
    output:
        expand("output/{dataset}/{subset}_{partition}.csv", partition=["01", "02"])
    shell:
        "python scripts/test.py {input}"

但这会导致“没有为通配符‘数据集’给出任何值。

或者,当我尝试这个时:

datasets = ["somedataset", "seconddataset"]

for dataset in datasets:
    rule:
        name: f"process_{dataset}"
        input:
            expand("data/{dataset}/{subset}.csv", dataset=[dataset], subset=subsets)
        output:
            expand("output/{dataset}/{subset}_{partition}.csv", dataset=[dataset], subset=subsets, partition=["01", "02"])
        shell:
            "python scripts/test.py {input}"

我明白了

No rule to produce 1

python snakemake
1个回答
0
投票

我想说

checkpoints
是去这里的方法。它们允许您在运行中重新评估 dag。在您的情况下,检查
test.py
的输出并相应地运行下一个规则。

文档涵盖了很多可能性,您可能还想看看与您更相关的示例,例如这里

免责声明:我自己从未使用过它们(总是使用预定义的配置文件),所以请保留我的建议。

© www.soinside.com 2019 - 2024. All rights reserved.