我收到一条相当简单的规则的错误。我必须为另一个程序编写一个任务文件,需要一个 tsv 文件。我从配置文件中读取一定数量的参数,并使用 shell 命令将它们写入文件中。
Code:
rule create_tasks:
output:
temp("tasks_{sample}.tsv")
params:
ID="{sample}",
file=lambda wc: samples["path"][wc.sample] ,
bigwig=lambda wc: samples["bigwig"][wc.sample] ,
ambig=lambda wc: samples["ambig"][wc.sample]
shell:
'echo -e "{params.ID}\t{params.file}" > {output}'
当我执行工作流程时,出现以下错误:
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cluster nodes: 1
Job counts:
count jobs
1 create_tasks
1
[Mon Oct 12 14:48:15 2020]
rule create_tasks:
output: tasks_sampleA.tsv
jobid: 0
wildcards: sample=sampleA
echo -e "sampleA /Path/To/sampleA.bed " > tasks_sampleA.tsv
WorkflowError in line 23 of /path/to/workflow.snakefile:
'Wildcards' object has no attribute 'output'
File "/path/to/miniconda/envs/snakemake_submit/lib/python3.8/site-packages/snakemake/executors/__init__.py", line 111, in run_jobs
File "/path/to/miniconda/envs/snakemake_submit/lib/python3.8/site-packages/snakemake/executors/__init__.py", line 1233, in run
我应该提到,其中两个变量是空的,并且我期望 echo 命令中存在制表符/空格。
有人能解释一下为什么snakemake试图在通配符中查找输出吗?我特别困惑,因为它打印了正确的命令。
我遇到了同样的问题。
问题可能在于您如何从命令行调用 Snakemake。
例如,这是我的 Snakefile 规则:
rule sort:
input:
"{file}.bam",
output:
"{file}.sorted.bam",
"{file}.sorted.bai",
shell:
"sambamba sort {input}"
我什至没有params
or wildcards
明确地在那里的任何地方。
但是当我在 Slurm HPC 上运行它时,我得到了同样的错误:
snakemake -j 10 -c "sbatch {cluster.params}" -u cluster.yaml
The Wildcards
(注意大写“W”)和params
对象不符合规则。
它们来自规则的集群执行,在尝试解析规则时抛出错误cluster.yaml
file.
我的里面没有集群参数规范cluster.yaml
文件为sort
规则,所以抛出了错误。
我通过添加解决了这个问题
sort:
params: "..."
to my cluster.yaml
文件。
根据您的情况,在create_tasks: ...
列表。
您还可以添加一个__default__: ...
默认情况下,列表作为任何作业的默认提交参数,除非它与其他规则匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)