【问题标题】:Snakemake: output file name seems to require a static path portionSnakemake:输出文件名似乎需要静态路径部分
【发布时间】:2020-11-23 19:06:35
【问题描述】:

我发现每个规则的输出文件的名称似乎需要一个静态部分,例如“data/{wildcard}_data.csv”与“{wildcard}_data.csv

例如,下面的脚本在空运行时返回以下错误:

正在构建作业的 DAG... /home/rebecca/workflows/exploring_tools/affymetrix_preprocess/snakemake/Snakefile 第 12 行中的 MissingInputException: 缺少规则 getDatFiles 的输入文件: GSE4290

脚本:

rule all:
 input: expand("{geoid}_datout.scaled.expr.csv", geoid = config['geoid'], out_dir = config['out_dir'])       
 benchmark: "benchmark.csv"       

rule getDatFiles:
 input: "{geoid}"       
 output: temp("{geoid}_datFiles.RData")       
 shell:
    "Rscript scripts/getDatFiles.R"

rule maskProbes:
 input: "{geoid}_datFiles.RData"       
 output: temp("{geoid}_datFiles.masked.RData")       
 params:
  probeFilterFxn = lambda x: config['probeFilterFxn'],
  minProbeNumber = lambda x: config['minProbeNumber'],
  probeSingle = lambda x: config['probeSingle']
 script: "scripts/maskProbes.R"

rule runExpresso:
 input: "{geoid}_datFiles.masked.RData"       
 output: temp("{geoid}_datout.RData")       
 params:
  bgcorrect_method = lambda x: config['bgcorrect_method'],
  normalize = lambda x: config['normalize'],
  pmcorrect_method = lambda x: config['pmcorrect_method'],
  summary_method = lambda x: config['summary_method']
 script: "scripts/runExpresso.R"

rule scaleData:
 input: "{geoid}_datout.RData"       
 output: temp("{geoid}_datout.scaled.RData")       
 params: sc = lambda x: config['sc']
 script: "scripts/scaleData.R"

rule getExpr:
 input: "{geoid}_datout.scaled.RData"       
 output: temp("{geoid}_datout.scaled.expr.csv")       
 script: "scripts/getExpr.R"

...虽然以下脚本运行没有错误(不同之处在于在输出文件名之前包含“输出/”:

rule all:
 input: expand("output/{geoid}_datout.scaled.expr.csv", geoid = config['geoid'], out_dir = config['out_dir'])
 benchmark: "output/benchmark.csv"

rule getDatFiles:
 input: "output/{geoid}"
 output: temp("output/{geoid}_datFiles.RData")
 shell:
    "Rscript scripts/getDatFiles.R"

rule maskProbes:
 input: "output/{geoid}_datFiles.RData"
 output: temp("output/{geoid}_datFiles.masked.RData")
 params:
  probeFilterFxn = lambda x: config['probeFilterFxn'],
  minProbeNumber = lambda x: config['minProbeNumber'],
  probeSingle = lambda x: config['probeSingle']
 script: "scripts/maskProbes.R"

rule runExpresso:
 input: "output/{geoid}_datFiles.masked.RData"
 output: temp("output/{geoid}_datout.RData")
 params:
  bgcorrect_method = lambda x: config['bgcorrect_method'],
  normalize = lambda x: config['normalize'],
  pmcorrect_method = lambda x: config['pmcorrect_method'],
  summary_method = lambda x: config['summary_method']
 script: "scripts/runExpresso.R"

rule scaleData:
 input: "output/{geoid}_datout.RData"
 output: temp("output/{geoid}_datout.scaled.RData")
 params: sc = lambda x: config['sc']
 script: "scripts/scaleData.R"

rule getExpr:
 input: "output/{geoid}_datout.scaled.RData"
 output: temp("output/{geoid}_datout.scaled.expr.csv")
 script: "scripts/getExpr.R"

我很难理解为什么会发生这种情况。最终,我希望工作流程尽可能地可行,理想情况下,这需要使输出目录可变。

任何见解将不胜感激。

【问题讨论】:

    标签: snakemake


    【解决方案1】:

    你有:

    rule getDatFiles:
     input: "{geoid}"
    

    这意味着在当前目录中应该有一个名为 {geoid} 的文件,例如./GSE4290。我怀疑你想要的是:

    rule getDatFiles:
        input: "data/{geoid}_data.csv"
    ...
    

    input: "output/{geoid}" 工作可能是因为已经在别处创建了一个名为 output/GSE4290 的文件。

    (我没有看过其余的脚本)

    【讨论】:

    • 因为没有规则生成 {geoid} 这可能是最好的猜测。
    【解决方案2】:

    你是在同一个目录下运行它们吗?

    【讨论】:

    • 是的(它要求我输入更多...)
    • 这应该是一条评论。
    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2014-05-26
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多