python - 作为 Snakefile 输出的函数或字典理解

标签 python python-3.x python-3.7 snakemake

我有一个具有高度冗余输出的 Snakemake 规则(此处简化):

rule redundant:
    output:
        a_x = "prefix_a_x.ext"
        b_x = "prefix_b_x.ext"
        a_y = "prefix_a_y.ext"
        b_y = "prefix_b_y.ext"
    run:
        process_1(output.a_x)
        process_2(output.a_y)
        process_3(output.b_x)
        process_4(output.b_y)

我可以以牺牲可读性为代价删除冗余:

rule less_readable:
    output:
        [f"prefix_{a}_{b}.ext"
         for a in ["a", "b"]
         for b in ["x", "y"]]
    run:
        process_1(output[0])
        process_2(output[1])
        process_3(output[2])
        process_4(output[3])

(我不想冒险使用 expand("prefix_{a}_{b}.ext", a=["a", "b"], b=["x", "y"]) 因为输出的顺序很重要,我担心它可能会改变 在未来的 Snakemake 版本中。)

我想要两全其美,例如:

rule more_readable:
    output:
        {f"{a}_{b}": f"prefix_{a}_{b}.ext"
         for a in ["a", "b"]
         for b in ["x", "y"]}
    run:
        process_1(output.a_x)
        process_2(output.a_y)
        process_3(output.b_x)
        process_4(output.b_y)

遗憾的是,这不起作用:

$ snakemake -j 1 prefix_a_x.ext
Building DAG of jobs...
MissingRuleException:
No rule to produce prefix_a_x.ext (if you use input functions make sure that they don't raise unexpected exceptions).

如何为自动生成的目标分配标签?

我用

$ snakemake --version
7.14.2

最佳答案

你最后的代码片段几乎是正确的,请确保使用字典扩展(**):

rule more_readable:
    output:
        **{f"{a}_{b}": f"prefix_{a}_{b}.ext"
         for a in ["a", "b"]
         for b in ["x", "y"]}

关于python - 作为 Snakefile 输出的函数或字典理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75604912/

相关文章:

python - 如何在库函数中使用异步事件循环

python-3.x - 从图纸中提取信息

python - 如何使用 Python/Pandas 衡量预测的准确性?

Python asyncio 跳过处理直到函数返回

python - 如何匹配Python中封装在列表中的两个字典的键?

Python 实例化子类

python - 按条件将列拆分为多行

python - 即使Jupyter中的当前单元格发生错误,如何自动执行下一个单元格?

python - 通过回调更新 Dash 数据表

python - HTTPConnection.request 不遵守超时?