当前规则在 Snakemake 中的名称
Current-rule's name in Snakemake
我正在使用 Snakemake,但我找不到访问当前规则名称的方法。
例如,有没有办法像这样访问:
rule job1:
input: check_inputs(rules.current.name)
output: ...
当每个规则的 check_inputs
函数大致相同时,这会非常有用。
当然,我做了这个并且它有效:
rule job1:
input: check_inputs("job1")
output: ...
但是,我想知道是否存在更多 "Snakemaker way" 来获取当前规则的名称以避免每次编写/硬编码规则名称。
我们将不胜感激任何形式的帮助或建议。
--- 编辑 1 ---
只有当 input
和 output
语句被 snakemake 解析时,规则名称才能通过 {rules.myrule.name}
访问。所以在input
/output
定义中不可能使用{rules.myrule.name}
。
例如,我们的想法是快速访问当前规则的名称 {rules.current}
,因为 {rules.myrule.name}
也是重复的。
我认为 rule.name
应该有效,但它看起来只是 rule
,但它不能在所有情况下使用:请参阅 https://bitbucket.org/snakemake/snakemake/issues/199/rule-name-cant-be-accessed-by-rule-in
安德烈亚斯
(编辑:提出解决方法)
{rule}
可用于 shell:/运行: 指令期间的规则名称。如 op 所述,这在 input/output:
中不起作用。但是,当前模板是一种变通方法
myrule = "foo"
rule foo:
output: touch(myrule + ".ok")
shell:
'echo "I am {rule}, making {output}"'
在上面的例子中,引入变量myrule
是不必要的,因为它只使用一次。但是当你想在各种 snakemake 指令中多次使用规则名称时,它更有意义。它还有助于规则模板化。
我正在使用 Snakemake,但我找不到访问当前规则名称的方法。
例如,有没有办法像这样访问:
rule job1:
input: check_inputs(rules.current.name)
output: ...
当每个规则的 check_inputs
函数大致相同时,这会非常有用。
当然,我做了这个并且它有效:
rule job1:
input: check_inputs("job1")
output: ...
但是,我想知道是否存在更多 "Snakemaker way" 来获取当前规则的名称以避免每次编写/硬编码规则名称。
我们将不胜感激任何形式的帮助或建议。
--- 编辑 1 ---
只有当 input
和 output
语句被 snakemake 解析时,规则名称才能通过 {rules.myrule.name}
访问。所以在input
/output
定义中不可能使用{rules.myrule.name}
。
例如,我们的想法是快速访问当前规则的名称 {rules.current}
,因为 {rules.myrule.name}
也是重复的。
我认为 rule.name
应该有效,但它看起来只是 rule
,但它不能在所有情况下使用:请参阅 https://bitbucket.org/snakemake/snakemake/issues/199/rule-name-cant-be-accessed-by-rule-in
安德烈亚斯
(编辑:提出解决方法)
{rule}
可用于 shell:/运行: 指令期间的规则名称。如 op 所述,这在 input/output:
中不起作用。但是,当前模板是一种变通方法
myrule = "foo"
rule foo:
output: touch(myrule + ".ok")
shell:
'echo "I am {rule}, making {output}"'
在上面的例子中,引入变量myrule
是不必要的,因为它只使用一次。但是当你想在各种 snakemake 指令中多次使用规则名称时,它更有意义。它还有助于规则模板化。