snakemake назвал входные файлы в блоке run - PullRequest
0 голосов
/ 20 марта 2020

Мой код выглядит следующим образом:

rule my_rule:
    input: 
        in_one = rules.some_rule_one.output,
        in_two = rules.some_rule_two.output,
    output: some_output
    run:
        with open(input.in_one, 'rt') as f:
            ## do_something

Когда я его запускаю, я получаю следующую ошибку:

RuleException:
TypeError in line ## of myfile.smk:
expected str, bytes or os.PathLike object, not set

Как мне ввести имя файла ввода?

1 Ответ

0 голосов
/ 20 марта 2020

Очевидно, что решение состоит в том, чтобы использовать rules.some_rule_one.output[0] и rules.some_rule_two.output[0].

Однако, если выходы some_rule названы, они могут использоваться как есть.

rule some_rule_one:
    input: 'some_input_one'
    output: 'some_output_one'
    shell: ...

rule some_rule_two:
    input: 'some_input_two'
    output:
        foo = 'some_output_two'
    shell: ...

rule my_rule:
    input: 
        in_one = rules.some_rule_one.output[0],
        in_two = rules.some_rule_two.output.foo,
    output: some_output
    run:
        with open(input.in_one, 'rt') as f:
            ## do_something

Возможно, просто для интереса, это не проблема, когда my_rule использует shell: вместо run:, то есть rules.some_rule_one.output будет отлично работать с shell:

...