Input Snakemake使用扩展但不重复的多个输入文件
我是个新手,不知道怎么解决这个问题 我的规则有两个输入:Input Snakemake使用扩展但不重复的多个输入文件,input,selection,expand,snakemake,Input,Selection,Expand,Snakemake,我是个新手,不知道怎么解决这个问题 我的规则有两个输入: 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 我将创建一个函数,用于在文件之间进行此类
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
我将创建一个函数,用于在文件之间进行此类匹配,但该函数应同时管理输入文件1和输入文件2。我想创建一个函数,创建一个具有不同允许组合的字典,但在扩展过程中如何“迭代”它呢
谢谢假设rule
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}
"""
此管道将执行以下命令
cat A2£.txt C2.txt > A2£.C2.txt
cat A1$.txt C1.txt > A1$.C1.txt
cat B1€.txt C1.txt > B1€.C1.txt
cat B2¥.txt C2.txt > B2¥.C2.txt
如果用
触摸开始输入文件,触摸'A1$.txt''A2.txt''B1€.txt''B2¥.txt''C1.txt''C2.txt'
您应该能够运行此示例。谢谢!我明白了:如果我是对的,您正在过滤outfiles
中的“匹配”文件,因此snakemake知道它必须创建什么。是的,outfiles
是您想要的文件列表,snakemake不关心您如何构建此列表。Snakemake只需要生成这些文件的规则。