snakemake - 没有明显原因的 Snakemake 中的通配符语法错误
问题描述
我不断收到有关其输出规则中没有相同通配符的规则的错误,并且我无法弄清楚错误的来源可能是什么:
SyntaxError:
Not all output, log and benchmark files of rule bcftools_filter contain the same wildcards. This is crucial though, in order to avoid that two or more jobs write to the same file.
...
rule merge_YRI_GTEx:
input:
kg=expand("kg_vcf/1kg_yri_chr{q}.vcf.gz", q=range(1,23)),
gtex=expand("gtex_vcf/gtex_chr{v}.snps.recode.vcf.gz", v=range(1, 23))
output:
"merged/merged_chr{i}.vcf.gz"
shell:
"bcftools merge \
-0 \
-O z \
-o {output} \
{input.kg} \
{input.gtex}"
rule bcftools_filter:
input:
expand("merged/merged_chr{i}.vcf.gz", i=range(1,23))
output:
filt="filtered_vcf/merged_filtered_chr{i}.vcf.gz",
chk=touch(".bcftools_filter.chkpnt")
threads:
4
shell:
"bcftools filter \
--include 'AN=1890 && AC > 0' \
--threads {threads} \
-O z \
-o {output.filt} \
{input}"
...
rule list_merged_filtered_vcfs:
input:
".bcftools_filter.chkpnt"
output:
"processed_vcf_list.txt"
shell:
"for i in {{1..22}}; do \ "
"echo \"{config[sprime_dir]}/filtered_vcf/merged_filtered_chr${{i}}.vcf.gz\" >> \
{output}; done"
它所抱怨的具体线路正是"bcftools filter \
让我更加目瞪口呆的线路。我尝试为输入通配符命名,甚至仔细检查调用bcftools_filter
'soutput
的规则以及产生bcftools_filter
's的规则input
都无济于事。不知道是什么给了我这个错误。
解决方案
我认为错误来自chk=touch(".bcftools_filter.chkpnt")
不包含通配符{i}
。
除此之外,我不确定您的规则是否非常明智。您正在传递到bcftools filter
输入文件列表(来自expand(...)
),但我认为 bcftools 过滤器不接受多个输入文件。此外,您的规则将使用相同的输入文件列表创建输出文件filtered_vcf/merged_filtered_chr{i}.vcf.gz
(每个 i 值一个)。你确定你想要expand("merged/merged_chr{i}.vcf.gz", i=range(1,23))
而不是 just "merged/merged_chr{i}.vcf.gz"
,在上游某处给出 i 的值吗?
推荐阅读
- r - 从 Excel 迁移到 R:如何根据特定的单元格值操作数据?
- autodesk-forge - 是否有必要卸载加载的模型,或者我应该从主 forgeViewer 标签中删除所有标签?
- elasticsearch - 响应中未保留的 agg 名称的排序
- arrays - 从 Swiftui 中的变量获取对象的特定属性
- visual-studio - 在 Visual Code Studio 中哪里可以找到 Flutter 布局检查器?
- javascript - 如何根据 Vue JS 中 for 循环中的布尔值显示图像?
- python - “自动”包的 pip 安装错误
- winapi - Winapi 如何将矩形绘制到特定的窗口句柄?
- sql - 在 CASE 语句中聚合列
- node.js - Github Actions 组织节点部署到 github 页面