首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Snakemake InputFunctionExceptionAttributeError:“通配符”对象没有属性

Snakemake InputFunctionExceptionAttributeError:“通配符”对象没有属性
EN

Stack Overflow用户
提问于 2020-04-15 04:28:57
回答 1查看 770关注 0票数 1

我有一个列表对象,其中包含芯片序列单端fastq文件名为allfiles=['/path/file1.fastq','/path/file2.fastq','/path/file3.fastq']。我正在尝试将该对象allfiles设置为通配符(我想要fastqc规则的输入(以及其他规则,如映射,但让它保持简单)。我尝试了下面的代码(lambda wildcards: data.loc[(wildcards.sample),'read1'])。然而,这给了我一个错误

代码语言:javascript
运行
复制
"InputFunctionException in line 118 of Snakefile:
AttributeError: 'Wildcards' object has no attribute 'sample'
Wildcards:
" 

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

代码:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 05:35:50

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

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

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

https://stackoverflow.com/questions/61216641

复制
相关文章

相似问题

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