代码之家  ›  专栏  ›  技术社区  ›  Nikita Vlasenko

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

  •  2
  • Nikita Vlasenko  · 技术社区  · 6 年前

    我正试图提供一堆文件作为输入 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}"
    

    我想要 蛇形 从中读取文件 umap 目录,获取它们的名称,然后使用它们传递给python脚本,这样每个结果都会得到一个唯一的名称。如何在不出现我现在所得到的错误的情况下完成这项任务:

    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

    所以我就这样加了一句:

    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.
    

    所以,它没有运行。

    更新

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

    samples='SCID_WT_CCA WT SCID plus_1 minus_1'
    

    当然,还添加了各自的文件,但没有修复这个错误。

    实际上,如果我跑步 snakemake cluster 我得到的错误和最上面的一样,但如果我只是跑 蛇形 ,然后是 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}"
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   bli    6 年前

    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
  •  1
  •   Nikita Vlasenko    6 年前

    bli output/{sample} python snakemake output/file_name 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}"