使用 snakemake 的参数空间自定义模式

Custom patterns with snakemake's paramspace

是否可以将自定义 wildcard_patterninstance_patternssnakemake.utils.Paramspace 一起使用?

示例:

假设 Paramspace 看起来像这样

import snakemake
import pandas as pd

df = pd.DataFrame([
    ["default","2030"],
    ["default","2050"],
    ], columns=["scenario","year"])
paramspace = snakemake.utils.Paramspace(df)

然后 wildcard_patterninstance_pattern 看起来像这样

print(paramsapce.wildcard_pattern)
# 'scenario~{scenario}/year~{year}'


print(list(paramspace.instance_patterns))
# ['scenario~default/year~2030', 'scenario~default/year~2050']

我想要做的是让两种模式都没有前缀通配符的名称,即我希望它看起来像这样:

print(paramsapce.wildcard_pattern)
# '{scenario}/{year}'


print(list(paramspace.instance_patterns))
# ['default/2030', 'default/2050']

没有 public 功能,代码格式基于位置而不是名称,因此更改模式不会削减它。

我建议您只编写自己的辅助函数来格式化您想要的模式。该代码在其格式调用中使用了 iterrows 和 row.items。

pattern = '{scenario}/{year}'
instance_patterns = [
    pattern.format(**dict(i for i in row.items())) 
    for _, row in df.iterrows()]

您还可以打开一个问题,请求更改以禁止使用参数名称或提供自定义格式化程序。目前,您可以更改参数分隔符(默认 ~)。