我正在与Snakemake合作,但找不到找到当前规则名称的方法。
例如,有没有办法像这样进行访问:
rule job1:
input: check_inputs(rules.current.name)
output: ...
Run Code Online (Sandbox Code Playgroud)
当check_inputs每个规则的功能大致相同时,这将非常有用。
当然,我做到了,它的工作原理是:
rule job1:
input: check_inputs("job1")
output: ...
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否存在一种更多的“ Snakemaker方式”来获取当前规则的名称,以避免每次都编写/硬编码该规则的名称。
任何帮助或建议将不胜感激。
--- EDIT1 ---只有当snakemake解析了and 语句时,才能
访问规则名称。因此在/ 定义中无法使用。{rules.myrule.name}inputoutput{rules.myrule.name}inputoutput
这样做的想法是例如快速访问当前规则的名称{rules.current},因为{rules.myrule.name}它也是重复的。
有没有办法在snakemake中重用规则,仅更改params?
例如:
rule job1:
...
params:
reference = "path/to/ref1"
...
rule job2:
input: rules.job1.output
...
params:
reference = "path/to/ref2"
Run Code Online (Sandbox Code Playgroud)
job1和job2规则正在做同样的事情,但我需要连续调用它们并且reference必须修改参数。它为非常相似的任务生成大量代码。
我尝试为这一步制作一个子工作流程,并且主 Snakefile 更具可读性。然而,子工作流程代码仍然重复。
有什么想法或建议吗?我错过了什么?
编辑
更具体地说,job2 必须在 job1 之后执行,使用后者的输出。