10

我正在使用 Snakemake,但找不到访问当前规则 name 的方法。

例如,有没有办法获得这样的访问权限:

rule job1:
    input: check_inputs(rules.current.name)
    output: ...

check_inputs当每个规则的功能或多或少相同时,这可能非常有用。

当然,我做了这个并且它有效:

rule job1:
    input: check_inputs("job1")
    output: ...

但是,我想知道是否存在更多“Snakemaker 方式”来获取当前规则的名称,以避免每次都编写/硬编码规则的名称。

任何形式的帮助或建议将不胜感激。

--- EDIT1 ---只有当和语句由snakemake解析时,才能
访问规则名称。所以在/定义中是不可能使用的。{rules.myrule.name}inputoutput{rules.myrule.name}inputoutput

例如,这个想法是为了快速访问当前规则的名称{rules.current},因为{rules.myrule.name}它也是重复的。

4

2 回答 2

2

(编辑:提出了一种解决方法)

{rule}可用于 shell:/run: 指令期间的规则名称。正如操作所述,这在input/output:. 但是,当前的模板是一种工作方式

myrule = "foo"
rule foo:
    output: touch(myrule + ".ok")
    shell:
        'echo "I am {rule}, making {output}"'

在上面的示例中,没有必要引入变量myrule,因为它只使用一次。但是当您想在各种蛇形指令中多次使用规则名称时,它更有意义。它还有助于规则模板化。

于 2019-12-04T09:17:01.567 回答
1

我认为rule.name应该可以工作,但它看起来只是rule,但不能在所有情况下使用:请参阅https://bitbucket.org/snakemake/snakemake/issues/199/rule-name-cant-be-accessed-附规则

安德烈亚斯

于 2016-12-05T15:35:28.870 回答