私は数十のルールを持つsnakefileを持っており、何千ものファイルを処理しています。これは、DNA配列解析のためのバイオインフォマティクスパイプラインです。今日私はサンプルセットにさらに2つのサンプルを追加しました。スネークメイクを実行できると思っていました。新しいサンプルファイルとそれに依存するすべてのファイルを処理するために、非常にトップレベルに。しかし、それは何もしません。そして-Rオプションはそれをしません。新しいファイルが階層の最下部に現れたときにSnakemakeを使って階層的なルールベースの方法でファイルを更新する方法はありますか?
問題はこのsnakefileで示されている:
> rm test*.txt
> touch test2.txt
> touch test1.txt
> snakemake -s tst -F
出力は次のとおりです:
Provided cores: 1
Rules claiming more threads will be scaled down.
Job counts:
count jobs
1 A
1
rule A:
input: test2.txt
output: test1.txt
jobid: 0
Finished job 0.
1 of 1 steps (100%) done
test5.txtが存在しないので、私は次のように
> cat tst
rule A:
output: "test1.txt"
input: "test2.txt"
shell: "cp {input} {output}"
rule B:
output: "test2.txt"
input: "test3.txt"
shell: "cp {input} {output}"
rule C:
output: "test3.txt"
input: "test4.txt"
shell: "cp {input} {output}"
rule D:
output: "test4.txt"
input: "test5.txt"
shell: "cp {input} {output}"
はそれを実行しますその旨のエラーメッセージを期待していたが、それは起こらなかった。もちろん、test3.txtとtest4.txtは存在しません。
さらに、-Fの代わりに-Rを使用すると、「何もしない」という結果になります。 "-R A"を使用するとルールAのみが実行されます。
これは、ツリーの最上部にルールを作成するように指示し、そのルールの出力ファイルと入力ファイルが既に存在する場合、Snakemakeが依存ツリー全体を解析しないことを示しています。そして、-Rオプションはそれを強制しません。プロジェクトで-Fを実行しようとしたとき、再ビルドする必要のないファイルも含め、全体を再構築し始めました。
これはSnakemakeがやっているはずの基本であり、わかりません。新しいサンプルを分析するために私のパイプラインを得るために見ることができる唯一の方法は、新しいファイルに必要な各ルールを個別に呼び出すことです。それはあまりにも面倒で、私が最初にSnakemakeを使用した理由の1つです。
ヘルプ!
新しいサンプルが上記の例にどのように適合しているかを示します。ルールDを次のように変更します。 ' ルールD: 出力:" test4.txt " 入力:" test5.txt "、" test6.txt " シェル:" cat {input [0]} {input [1]} > {出力} " " – tedtoal
コメント編集ルールが機能しない理由はわかりません。 – tedtoal
ルールDをそれに変更して再実行すると、-Rを指定しても何も起こりません。 – tedtoal