如何解决在Snakemake中是否可以使用“可选”通配符或文件名的一部分?
我想知道是否可以将Snakemake中的这两个规则合并为一个规则(它们在“ run:”中执行相同的操作):
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',tt|gs}_d{amount}.npz'
run:
# DO STUFF
我尝试定义stats/output_{type}{amount}.npz
,但通配符显然与空字符串不匹配。
第二个想法是像stats/{output,output_{type}|output_{type}_d{amount}}
一样将其放入“或”中,但是这里的问题是通配符中的通配符。
谢谢!
解决方法
感谢Eric,我意识到正则表达式可以在snakemake规则的通配符中使用。唯一的问题是,snakemake不接受“空”通配符,但是可以按此处的说明进行覆盖: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
开头的字符串。
希望它能帮助到别人。
您不能用非常简单的方式做到这一点吗?
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
。
使您的规则尽可能简单/通用。不要忘记,snakemake会从您要求的最终文件中解析通配符,并遵循规则以查看如何生成此文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。