snakemake 扩展无输入文件
snakemake expansion no input files
我有一些不同的配置,我需要将它们全部组合到 运行 一个 python 脚本
versions = ['lg', 'sm']
start_time = ['0', '1']
end_time = ['2']
我想要的是 snakemake 为我做这个:
python my_script.py -v lg -s 0 -e 2 > lg_0_2.out
python my_script.py -v lg -s 1 -e 2 > lg_1_2.out
python my_script.py -v sm -s 0 -e 2 > sm_0_2.out
python my_script.py -v sm -s 1 -e 2 > sm_1_2.out
但我似乎无法弄清楚如何在 snakemake 中执行此操作。有什么想法吗?
Snakemake 有 an expand()
method 即 shorthand 用于通过外积进行扩展,这就是您描述的操作。通常,这将通过在第一条规则(默认规则)中将输出文件字符串生成为 input
,然后提供一个规则(下面的 myrule
)来解析此类字符串以生成命令来完成将用于生成输出。在代码中,它会像
Snakefile
versions = ['lg', 'sm']
start_time = ['0', '1']
end_time = ['2']
rule all:
input:
expand("{version}_{start}_{end}.out",
version=versions, start=start_time, end=end_time)
rule myrule:
output: "{version,[^_]+}_{start,[0-9]+}_{end,[0-9]+}.out"
shell:
"""
python my_script.py -v {wildcards.version} -s {wildcards.start} -e {wildcards.end} > {output}
"""
运行 snakemake
在此 Snakefile
所在的目录中然后将生成所需的文件。
我有一些不同的配置,我需要将它们全部组合到 运行 一个 python 脚本
versions = ['lg', 'sm']
start_time = ['0', '1']
end_time = ['2']
我想要的是 snakemake 为我做这个:
python my_script.py -v lg -s 0 -e 2 > lg_0_2.out
python my_script.py -v lg -s 1 -e 2 > lg_1_2.out
python my_script.py -v sm -s 0 -e 2 > sm_0_2.out
python my_script.py -v sm -s 1 -e 2 > sm_1_2.out
但我似乎无法弄清楚如何在 snakemake 中执行此操作。有什么想法吗?
Snakemake 有 an expand()
method 即 shorthand 用于通过外积进行扩展,这就是您描述的操作。通常,这将通过在第一条规则(默认规则)中将输出文件字符串生成为 input
,然后提供一个规则(下面的 myrule
)来解析此类字符串以生成命令来完成将用于生成输出。在代码中,它会像
Snakefile
versions = ['lg', 'sm']
start_time = ['0', '1']
end_time = ['2']
rule all:
input:
expand("{version}_{start}_{end}.out",
version=versions, start=start_time, end=end_time)
rule myrule:
output: "{version,[^_]+}_{start,[0-9]+}_{end,[0-9]+}.out"
shell:
"""
python my_script.py -v {wildcards.version} -s {wildcards.start} -e {wildcards.end} > {output}
"""
运行 snakemake
在此 Snakefile
所在的目录中然后将生成所需的文件。