使用 snakemake 的参数空间自定义模式
Custom patterns with snakemake's paramspace
是否可以将自定义 wildcard_pattern
和 instance_patterns
与 snakemake.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_pattern
和 instance_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()]
您还可以打开一个问题,请求更改以禁止使用参数名称或提供自定义格式化程序。目前,您可以更改参数分隔符(默认 ~
)。
是否可以将自定义 wildcard_pattern
和 instance_patterns
与 snakemake.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_pattern
和 instance_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()]
您还可以打开一个问题,请求更改以禁止使用参数名称或提供自定义格式化程序。目前,您可以更改参数分隔符(默认 ~
)。