【问题标题】:Snakemake InputFunctionException. AttributeError: 'Wildcards' object has no attributeSnakemake InputFunctionException。 AttributeError:“通配符”对象没有属性
【发布时间】:2020-04-14 20:28:56
【问题描述】:

我有一个带有 ChIP-seq 单端 fastq 文件名 allfiles=['/path/file1.fastq','/path/file2.fastq','/path/file3.fastq'] 的列表对象。我正在尝试将该对象 allfiles 设置为通配符(我想要 fastqc 规则的输入(以及其他规则,例如映射,但让我们保持简单)。我尝试了下面代码中的内容(@ 987654323@)。然而,这给了我错误

"InputFunctionException in line 118 of Snakefile:
AttributeError: 'Wildcards' object has no attribute 'sample'
Wildcards:
" 

有人确切地知道如何定义它吗?看来我很接近了,我得到了大致的想法,但是我没有正确地获取语法并执行它。谢谢!

代码:

import pandas as pd
import numpy as np

# Read in config file parameters
configfile: 'config.yaml'
sampleFile = config['samples'] # three columns: sample ID , /path/to/chipseq_file_SE.fastq , /path/to/chipseq_input.fastq
outputDir = config['outputdir'] # output directory

outDir = outputDir + "/MyExperiment"
qcDir = outDir + "/QC"

# Read in the samples table
data = pd.read_csv(sampleFile, header=0, names=['sample', 'read1', 'inputs']).set_index('sample', drop=False)
samples = data['sample'].unique().tolist() # sample IDs
read1 = data['read1'].unique().tolist() # ChIP-treatment file single-end file
inplist= data['inputs'].unique().tolist() # the ChIP-input files
inplistUni= data['inputs'].unique().tolist() # the ChIP-input files (unique)
allfiles = read1 + inplistUni

# Target rule
rule all:
    input:
        expand(f'{qcDir}' + '/raw/{sample}_fastqc.html', sample=samples),
        expand(f'{qcDir}' + '/raw/{sample}_fastqc.zip', sample=samples),

# fastqc report generation
rule fastqc:
    input: lambda wildcards: data.loc[(wildcards.sample), 'read1']
    output:
        html=expand(f'{qcDir}' + '/raw/{sample}_fastqc.html',sample=samples) ,
        zip=expand(f'{qcDir}' + '/raw/{sample}_fastqc.zip',sample=samples)
    log: expand(f'{logDir}' + '/qc/{sample}_fastqc_raw.log',sample=samples)
    threads: 4
    wrapper: "fastqc {input} 2>> {log}"

【问题讨论】:

  • 哦。我注意到我留下了“包装器:”而不是将其更改为“外壳:”(起初我使用了 Snakemake 的 fastqc 包装器)。我也修改了那个。 (无论如何,我还是把它留在了原始帖子中,以防其他人犯同样的错误,但我在我的代码中更正了它。

标签: wildcard snakemake


【解决方案1】:

目前rule fastqcoutput 文件在解析后没有任何通配符。也就是说,当前蛇文件中有一项工作,rule fastqc 尝试为所有样本生成一个输出文件。

但是,您似乎希望为每个样本单独运行 rule fastqc。在这种情况下,需要将其概括如下,其中{sample} 是通配符:

rule fastqc:
    input: lambda wildcards: data.loc[(wildcards.sample), 'read1']
    output:
        html = qcDir + '/raw/{sample}_fastqc.html,
        zip=qcDir + '/raw/{sample}_fastqc.zip'
    log: logDir + '/qc/{sample}_fastqc_raw.log'
    threads: 4
    shell: "fastqc {input} 2>> {log}"

【讨论】:

  • 谢谢,它解决了通配符定义问题!尽管如此,shell 部分也有一些问题:“MissingOutputException:作业已完成,但缺少输出文件。”我用 shell 命令替换了“wrapper:0.34.0/bio/fastqc”,错误消失了。也许是因为 fastqc shell 命令没有 {output} ,所以它不能正常工作? (可能在snakemake wrapper 中已经处理好了)
  • fastqc 默认将输出文件保存在与输入文件相同的目录中。您可以使用--outdir 更改此行为。
  • 这似乎是问题所在,是的,但由于某种原因仅添加 --outdir /path/ 不足以消除此错误。难道是我必须修改其他东西?例如,在目标规则中? (对我来说一切都很好,但谁知道......)。我还查看了snakemake包装器代码,这个人也使用了--output,但无论如何都必须移动文件。 snakemake-wrappers.readthedocs.io/en/stable/wrappers/… 看起来或者 fastqc 没有移动样本,即使我设置了 --outdir ,或者 Snakefile 中的某个地方存在另一个不兼容
  • 我建议在终端中运行 fastqc 命令并仔细查看输出文件名。
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 2012-12-01
  • 2021-04-19
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
相关资源
最近更新 更多