3

私は、snakemake を使用して Web から 2 つのファイルをダウンロードし、それらを 1 つの出力にマージする単純なパイプラインを作成しようとしています。

私がうまくいくと思ったのは、次のコードです。

dwn_lnks = {
    '1': 'https://molb7621.github.io/workshop/_downloads/sample.fa',
    '2': 'https://molb7621.github.io/workshop/_downloads/sample.fa'       
    }
import os

# association between chromosomes and their links
def chromo2link(wildcards):
    return dwn_lnks[wildcards.chromo]

rule all:
    input:
        os.path.join('genome_dir', 'human_en37_sm.fa')

rule download:
    output:
        expand(os.path.join('chr_dir', '{chromo}')),
    params:
        link=chromo2link,
    shell:
        "wget {params.link} -O {output}"


rule merger:
    input:
        expand(os.path.join('chr_dir', "{chromo}"), chromo=dwn_lnks.keys())
    output:
        os.path.join('genome_dir', 'human_en37_sm.fa')
    run:
        txt = open({output}, 'a+')
        with open (os.path.join('chr_dir', "{chromo}") as file:
                    line = file.readline()
                    while line:
                        txt.write(line)
                        line = file.readline()
        txt.close()

このコードは次のエラーを返します。 No values given for wildcard 'chromo'. in line 20

また、マージ ルールでは、実行内の python コードは機能しません。

snakemake パッケージのチュートリアルには、コンピューター科学者以外が詳細を学習できるほどの例が含まれていません。スネークメイクの使い方を学ぶための良いリソースを誰かが知っている場合は、共有していただければ幸いです:)。

4

1 に答える 1