对于snakemake,我希望根据布尔值在规则中有不同的输入(包括通配符)。
我试过:
rule quantify:
input:
if trimmed_fastq:
forward = path_trimmed_fastq + "/{sample}_R1_val_1.fq.gz",
rev = path_trimmed_fastq + "/{sample}_R2_val_2.fq.gz"
else:
forward = fastq_path + "/{sample}_R1.fastq.gz",
rev = fastq_path + "/{sample}_R2.fastq.gz"但是它给了我一个“无效的语法”错误,我认为它不喜欢如果在输入中的其他语句,有人知道如何解决这个问题吗?
我知道我可以有两个不同的"quantify“和"quantify_trimmed”规则,其中包含if there语句,但我想知道是否有更优雅的解决方案。
谢谢你的帮助
发布于 2022-06-20 16:45:52
实际上,在输入中不能有if..else语句。相反,可以使用函数来实现您想要的结果:
def getInputFilesForQuantify(wildcards):
files = dict()
if(trimmed_fastq):
files["forward"] = os.path.join(path_trimmed_fastq,wildcards.sample,"_R1_val_1.fq.gz")
files["rev"] = os.path.join(path_trimmed_fastq,wildcards.sample,"_R2_val_2.fq.gz")
else:
files["forward"] = os.path.join(fastq_path,wildcards.sample,"_R1.fastq.gz")
files["rev"] = os.path.join(fastq_path,wildcards.sample,"_R2.fastq.gz")
return files
rule quantify:
input: unpack(getInputFilesForQuantify)
output: ....注意:
这里使用的是将function.
unpack的参数传递给https://stackoverflow.com/questions/72686943
复制相似问题