在 Snakemake 中是否可以使用 "optional" 通配符或部分文件名?
Is it possible in Snakemake to have "optional" wildcard or part of the filename?
我想知道是否可以在一条规则中加入 Snakemake 中的这两个规则(它们在“运行:”中做同样的事情):
rule without_d:
input:
vals_pca = 'stats/input_{type}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}.npz'
run:
# DO STUFF
rule with_d:
input:
vals_pca = 'stats/input_{type}_d{amount}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}_d{amount}.npz'
run:
# DO STUFF
我试图定义stats/output_{type}{amount}.npz
,但通配符显然不匹配空字符串。
第二个想法是把它变成“或”,比如stats/{output, output_{type}|output_{type}_d{amount}}
,但这里的问题是通配符中的通配符。
谢谢!
你不能用非常简单的方法来做吗:
rule with_something:
input:
vals_pca = 'stats/input_{something}.npz',
output:
for_cnv = 'stats/output_{something}.npz'
run:
# DO STUFF
通配符由输出文件定义。如果您要求文件 output_typeWhatever_dWhatever.npz
,则规则将查找 input_typeWhatever_dWhatever.npz
。如果您要求文件 output_typeWhatever.npz
,则规则将用作输入 input_typeWhatever.npz
.
尽可能simple/generic遵守规则。不要忘记 snakemake 会从您请求的最终文件中解析通配符,并根据规则查看如何生成此文件。
感谢 Eric,我意识到可以在 snakemake 规则的通配符中使用正则表达式。唯一的问题是 snakemake 不接受“空”通配符,但这可以被覆盖,如 post 此处所述:https://groups.google.com/g/snakemake/c/S7fTL4jAYIM?pli=1
因此我的问题的解决方案如下:
rule both:
input:
vals_pca = 'stats/input_{type}{amount}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}{amount, .{0}|_d.+}.npz'
run:
# DO STUFF
Snakemake 会将 {amount, .{0}|_d.+}
匹配为空字符串或以 _d
开头的字符串。
希望对大家有所帮助。
我想知道是否可以在一条规则中加入 Snakemake 中的这两个规则(它们在“运行:”中做同样的事情):
rule without_d:
input:
vals_pca = 'stats/input_{type}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}.npz'
run:
# DO STUFF
rule with_d:
input:
vals_pca = 'stats/input_{type}_d{amount}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}_d{amount}.npz'
run:
# DO STUFF
我试图定义stats/output_{type}{amount}.npz
,但通配符显然不匹配空字符串。
第二个想法是把它变成“或”,比如stats/{output, output_{type}|output_{type}_d{amount}}
,但这里的问题是通配符中的通配符。
谢谢!
你不能用非常简单的方法来做吗:
rule with_something:
input:
vals_pca = 'stats/input_{something}.npz',
output:
for_cnv = 'stats/output_{something}.npz'
run:
# DO STUFF
通配符由输出文件定义。如果您要求文件 output_typeWhatever_dWhatever.npz
,则规则将查找 input_typeWhatever_dWhatever.npz
。如果您要求文件 output_typeWhatever.npz
,则规则将用作输入 input_typeWhatever.npz
.
尽可能simple/generic遵守规则。不要忘记 snakemake 会从您请求的最终文件中解析通配符,并根据规则查看如何生成此文件。
感谢 Eric,我意识到可以在 snakemake 规则的通配符中使用正则表达式。唯一的问题是 snakemake 不接受“空”通配符,但这可以被覆盖,如 post 此处所述:https://groups.google.com/g/snakemake/c/S7fTL4jAYIM?pli=1 因此我的问题的解决方案如下:
rule both:
input:
vals_pca = 'stats/input_{type}{amount}.npz',
output:
for_cnv = 'stats/output_{type, tt|gs}{amount, .{0}|_d.+}.npz'
run:
# DO STUFF
Snakemake 会将 {amount, .{0}|_d.+}
匹配为空字符串或以 _d
开头的字符串。
希望对大家有所帮助。