Snakemake具有扩展但没有重复的多个输入文件

问题描述 投票:0回答:1

我是蛇制作的新手,我不知道如何解决这个问题。

我的规则有两个输入:

rule test
    input_file1=f1
    input_file2=f2

f1在[A {1} $,A {2}£,B {1}€,B {2}¥中]

f2位于[C {1},C {2}]

数字是来自扩展调用的通配符。我需要找到一种将与数字完全匹配的文件传递给文件f1和f2的方法。例如:

f1 = A1

f2 = C1

f1 = B1

f2 = C1

我必须避免组合,例如:

f1 = A1

f2 = C2

我将创建一个在文件之间进行这种匹配的函数,但是相同的函数应同时管理input_file1和input_file2。我曾想过要创建一个可以使用允许的不同组合创建字典的函数,但是在扩展过程中如何在其上“迭代”呢?

谢谢

input selection expand snakemake
1个回答
0
投票

假设规则test在输出中提供一个名为{f1}.{f2}.txt的文件,那么您需要某种机制来正确地将f1和f2配对并创建{f1}.{f2}.txt文件的列表。

如何创建此列表取决于您,expand只是为此提供的便利功能,但在这种情况下,您可能希望避免使用它。

这是一个非常简单的示例:

fin1 = ['A1$', 'A2£', 'B1€', 'B2¥']
fin2 = ['C1', 'C2']

outfiles = []
for x in fin1:
    for y in fin2:
        ## Here you pair f1 and f2. This is a very trivial way of doing it:
        if y[1] in x:
            outfiles.append('%s.%s.txt' % (x, y))

wildcard_constraints:
    f1 = '|'.join([re.escape(x) for x in fin1]),
    f2 = '|'.join([re.escape(x) for x in fin2]),

rule all:
    input:
        outfiles,        

rule test: 
    input:
        input_f1 = '{f1}.txt',
        input_f2 = '{f2}.txt',
    output:
        '{f1}.{f2}.txt',
    shell:
        r"""
        cat {input} > {output}
        """

如果用touch 'A1$.txt' 'A2£.txt' 'B1€.txt' 'B2¥.txt' 'C1.txt' 'C2.txt'触摸开始的输入文件,则应该可以运行此示例。

© www.soinside.com 2019 - 2024. All rights reserved.