我最近开始使用Snakemake。
我想要实现的是:我有一些需要独立修改的samples (规则index_vcf)。然后,样本组是另一个规则(analyse)的输入,我们为groups中的每个组得到一个输出。
我希望第二条规则运行两个命令:
some_script --input_files 'A2 Ah AL' --output ../out/A.out和
some_script --input_files 'Banana BLM' --output ../out/B.out如果只针对一个组,我知道如何做,但是如果这两个组都这样做,那么我在analyse中扩展的通配符analyse需要依赖于这个组,并得到错误。
unhashable type: 'list'这是我的配置文件:
groups:
- A
- B
samples:
- A2
- Ah
- AL
- Banana
- BLM
grouped_samples:
A: A2_mod, Ah_mod, AL_mod
B: Banana_mod, BLM_mod这是我的蛇形
configfile: "config_PCAWG.yaml"
samples = config["samples"]
groups = config["groups"]
grouped_samples = config["grouped_samples"]
rule all:
input:
expand("../out/{group}.out", group = groups)
rule index_vcf:
input:
"../data/{sample}"
output:
"../data/{sample}_mod"
shell:
"tabix -f {input}"
rule analyse:
input:
expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())
output:
"../out/{group}.out
shell:
"some_script --input_files '{input}' --output {output}"发布于 2020-06-11 18:31:20
首先,您需要纠正错误打印(例如,有一个字符串,没有关闭引号)。接下来,有一个逻辑错误,因为没有任何规则产生与模式"../out/{group}.out"匹配的任何内容。你是说"../data/{group}.out"吗
现在是主要的部分。这是一个无效的语法:
expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())您的意思是使用通配符并生成扩展的lambda (或函数):
rule analyse:
input:
lambda wildcards: expand("{sample_from_group}",
sample_from_group=grouped_samples[wildcards.group].split())https://stackoverflow.com/questions/62328246
复制相似问题