首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Snakemake:目标规则不能包含通配符

Snakemake:目标规则不能包含通配符
EN

Stack Overflow用户
提问于 2018-06-13 07:41:13
回答 2查看 3.8K关注 0票数 2

我试图提供一堆文件作为snakemake的输入,但由于某些原因,通配符不起作用:

代码语言:javascript
复制
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}"

我希望snakemakeumap目录中读取文件,获取它们的名称,然后使用它们将它们传递给python脚本,这样每个结果都将获得一个惟一的名称。如何才能在不出现我现在遇到的错误的情况下完成此任务:

代码语言:javascript
复制
Building DAG of jobs...
WorkflowError:
Target rules may not contain wildcards. Please specify concrete files or 
a rule without wildcards.

更新

我发现最有可能的情况是在顶部需要rule all

https://bioinformatics.stackexchange.com/questions/2761/how-to-resolve-in-snakemake-error-target-rules-may-not-contain-wildcards

所以我这样添加了它:

代码语言:javascript
复制
samples='SCID_WT_CCA'
rule all:
    input:  
        expand('/Users/nikitavlasenko/python_scripts/data_files/umap/
        {sample}_umap.csv', sample=samples.split(' '))

然而,我收到了以下奇怪的消息:

代码语言:javascript
复制
Building DAG of jobs...
Nothing to be done.

所以,它没有运行。

更新

我认为这可能与我在顶部只有一个样本名称的事实有关,所以我将其更改为:

代码语言:javascript
复制
samples='SCID_WT_CCA WT SCID plus_1 minus_1'

并添加了相应的文件,当然,但它没有修复这个错误。

实际上,如果我运行snakemake cluster,我会得到和最上面一样的错误,但是如果我只运行snakemake,那么就会出现nothing to be done错误。我尝试用绝对路径替换相对路径,但没有帮助:

代码语言:javascript
复制
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}"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-13 20:45:13

"all“规则应该将您希望其他规则生成的文件列表作为输入作为输出。在这里,您似乎使用的是启动文件的列表。

尝试以下操作:

代码语言:javascript
复制
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}"
票数 2
EN

Stack Overflow用户

发布于 2018-06-14 05:37:13

根据bli answers的建议,我能够解决这个问题。但是,还需要做一处额外的修改。我将output/{sample}传递给python脚本,它从此路径生成了两个文件。这似乎不应该这样做,因为当snakemake写道它看不到output/file_name时,我得到了另一个错误。显然,只有当我手动设置所有路径,而不是python动态修改它时,它才能看到它们,所以我这样做了,这是最终的Snakefile,它工作得很好:

代码语言:javascript
复制
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}" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50827275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档