【问题标题】:Multiple file type outputs from a single rule: Wildcards in input files cannot be determined from output files单个规则的多种文件类型输出:输入文件中的通配符无法从输出文件中确定
【发布时间】:2020-06-10 15:09:16
【问题描述】:

我是 Snakemake 的新手,使用的是 snakemake-minimal 5.4.5。我有一个看起来像这样的规则:

rule make_grm:
   input:
      inc_snps: "path/snps_for_test_chr{chromosome}.txt",
      inc_samples: "path/samples_for_test_chr{chromosome}.txt"
   params:
      plink_root="path/data_chr{chromosome}",
      output_root="path/snpgrm_chr{chromosome}"
   output:
      expand("path/snpgrm_chr{chromosome}.grm.{ext}", ext=["gz", "id"])
   conda:
      "path/environment.yaml"
   shell:
      "gcta64 --bfile {params.plink_root} --make-grm-gz --keep {input.inc_samples} --extract {input.inc_snps} --out {params.output_root}"

本质上,它需要一些输入并通过 GCTA 运行它们,生成两个输出文件:一个 .id 文件和一个 .gz 文件。

如果我明确说明了这条规则中的所有文件名(即我使用染色体编号代替 {chromosome} 通配符),它就可以完美运行。现在我正在尝试这样做,以便我可以从命令行指定要查看的染色体,但 snakemake 抱怨我使用通配符:

Wildcard error in line 40 of Snakefile
Wildcards in input files cannot be determined from output files: chromosome

任何想法为什么如果我在我的 shell 中运行这样的东西:

snakemake --use-conda path/snpgrm_chr18.grm.gz

Snakemake 不能像我的其他规则那样推断出 {chromosome}=18?

(我也在 SGE 集群上运行此程序,但我忽略了这些细节,因为我认为它们与此行为无关并增加了很多混乱)

【问题讨论】:

    标签: snakemake


    【解决方案1】:

    如果你想在扩展函数中创建一个通配符,你必须把括号加倍:

    expand("path/snpgrm_chr{{chromosome}}.grm.{ext}", ext=["gz", "id"])

    这里,{{chromosome}} 是通配符,{ext} 只是扩展函数参数的占位符

    【讨论】:

    • 非常简单的修复,谢谢。我不知道需要在 expand() 中使用双括号通配符,但这是有道理的!
    • 展开函数将展开成一个列表"path/snpgrm_chr{chromosome}.grm.gz","path/snpgrm_chr{chromosome}.grm.id"。简而言之,第一个{ 转义了第二个{
    【解决方案2】:

    我在您的代码中发现了另一个问题:

       output:
          expand("path/snpgrm_chr{chromosome}.grm.{ext}", ext=["gz", "id"])
    

    expand 函数需要填写所有参数,{chromosome} 不需要。实际上你的意思是 {chromosome} 是一个通配符。你需要把它放在双括号中:

       output:
          expand("path/snpgrm_chr{{chromosome}}.grm.{ext}", ext=["gz", "id"])
    

    其余的在我的机器上工作。

    【讨论】:

    • 确实,染色体本来是用作通配符的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多