Snakemake 通配符内的通配符
Wildcard within wildcard in Snakemake
我最近开始使用 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
中扩展的通配符 sample_from_group
需要取决于该组我得到了错误
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
这是我的 Snakefile
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}"
首先您需要更正印刷错误(例如,有一个字符串没有右引号)。接下来,存在一个逻辑错误,即没有规则产生与模式 "../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())
我最近开始使用 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
中扩展的通配符 sample_from_group
需要取决于该组我得到了错误
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
这是我的 Snakefile
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}"
首先您需要更正印刷错误(例如,有一个字符串没有右引号)。接下来,存在一个逻辑错误,即没有规则产生与模式 "../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())