Snakemake:目标规则不能包含通配符
Snakemake: Target rules may not contain wildcards
我正在尝试提供一堆文件作为 snakemake
的输入,但由于某些原因通配符不起作用:
rule cluster:
input:
script = '/Users/nikitavlasenko/python_scripts/python/dbscan.py',
path = '/Users/nikitavlasenko/python_scripts/data_files/umap/{sample}.csv'
output:
path = '/Users/nikitavlasenko/python_scripts/output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
我希望snakemake
从umap
目录中读取文件,获取它们的名字,然后用它们传递给python脚本,这样每个结果都会得到一个独特的名字。如何在没有我现在遇到的错误的情况下完成这项任务:
Building DAG of jobs...
WorkflowError:
Target rules may not contain wildcards. Please specify concrete files or
a rule without wildcards.
Update
我发现最有可能 rule all
在顶部是必需的:
所以我是这样添加的:
samples='SCID_WT_CCA'
rule all:
input:
expand('/Users/nikitavlasenko/python_scripts/data_files/umap/
{sample}_umap.csv', sample=samples.split(' '))
但是,我收到以下奇怪的消息:
Building DAG of jobs...
Nothing to be done.
所以,不是运行宁。
Update
我觉得可能和我上面只有一个样例名有关,所以改成:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
并添加了相应的文件,当然,但它并没有修复这个错误。
实际上,如果我 运行 snakemake cluster
我会得到与最上面相同的错误,但如果我只是 运行 snakemake
,那么就会有 nothing to be done
错误。我试图用绝对路径代替相对路径,但没有帮助:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('data_files/umap/{sample}_umap.csv', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path = 'output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
"all" 规则应该将您希望其他规则生成的文件列表作为输入作为输出。在这里,您似乎使用的是起始文件列表。
尝试以下操作:
samples = 'SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('output/{sample}', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path = 'output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
根据 bli
回答的建议,我解决了这个问题。但是,还需要进行一项额外的修改。我将 output/{sample}
传递给 python
脚本,它从该路径生成了两个文件。似乎不应该这样做,因为当 snakemake
写它看不到 output/file_name
时我又遇到了另一个错误。显然,只有当我立即手动设置所有路径而不 python 即时修改它时,它才能看到它们,所以我这样做了,这是最终的 Snakefile
效果很好:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('output/{sample}_umap.png', sample=samples.split(' ')),
expand('output/{sample}_clusters.csv', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path_to_umap = 'output/{sample}_umap.png',
path_to_clusters = 'output/{sample}_clusters.csv'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path_to_umap {output.path_to_umap} -path_to_clusters {output.path_to_clusters}"
我正在尝试提供一堆文件作为 snakemake
的输入,但由于某些原因通配符不起作用:
rule cluster:
input:
script = '/Users/nikitavlasenko/python_scripts/python/dbscan.py',
path = '/Users/nikitavlasenko/python_scripts/data_files/umap/{sample}.csv'
output:
path = '/Users/nikitavlasenko/python_scripts/output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
我希望snakemake
从umap
目录中读取文件,获取它们的名字,然后用它们传递给python脚本,这样每个结果都会得到一个独特的名字。如何在没有我现在遇到的错误的情况下完成这项任务:
Building DAG of jobs...
WorkflowError:
Target rules may not contain wildcards. Please specify concrete files or
a rule without wildcards.
Update
我发现最有可能 rule all
在顶部是必需的:
所以我是这样添加的:
samples='SCID_WT_CCA'
rule all:
input:
expand('/Users/nikitavlasenko/python_scripts/data_files/umap/
{sample}_umap.csv', sample=samples.split(' '))
但是,我收到以下奇怪的消息:
Building DAG of jobs...
Nothing to be done.
所以,不是运行宁。
Update
我觉得可能和我上面只有一个样例名有关,所以改成:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
并添加了相应的文件,当然,但它并没有修复这个错误。
实际上,如果我 运行 snakemake cluster
我会得到与最上面相同的错误,但如果我只是 运行 snakemake
,那么就会有 nothing to be done
错误。我试图用绝对路径代替相对路径,但没有帮助:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('data_files/umap/{sample}_umap.csv', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path = 'output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
"all" 规则应该将您希望其他规则生成的文件列表作为输入作为输出。在这里,您似乎使用的是起始文件列表。
尝试以下操作:
samples = 'SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('output/{sample}', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path = 'output/{sample}'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path {output.path}"
根据 bli
回答的建议,我解决了这个问题。但是,还需要进行一项额外的修改。我将 output/{sample}
传递给 python
脚本,它从该路径生成了两个文件。似乎不应该这样做,因为当 snakemake
写它看不到 output/file_name
时我又遇到了另一个错误。显然,只有当我立即手动设置所有路径而不 python 即时修改它时,它才能看到它们,所以我这样做了,这是最终的 Snakefile
效果很好:
samples='SCID_WT_CCA WT SCID plus_1 minus_1'
rule all:
input:
expand('output/{sample}_umap.png', sample=samples.split(' ')),
expand('output/{sample}_clusters.csv', sample=samples.split(' '))
rule cluster:
input:
script = 'python/dbscan.py',
path = 'data_files/umap/{sample}_umap.csv'
output:
path_to_umap = 'output/{sample}_umap.png',
path_to_clusters = 'output/{sample}_clusters.csv'
shell:
"python {input.script} -data {input.path} -eps '0.3' -min_samples '10' -path_to_umap {output.path_to_umap} -path_to_clusters {output.path_to_clusters}"