Snakemake InputFunctionException. AttributeError: у объекта 'Wildcards' нет атрибута - PullRequest
1 голос
/ 14 апреля 2020

У меня есть список объектов с односторонними именами файлов fastq ChIP-seq allfiles=['/path/file1.fastq','/path/file2.fastq','/path/file3.fastq']. Я пытаюсь установить этот объект, allfiles, как подстановочный знак (я хочу ввести правило fastq c (и другие, такие как отображение, но давайте будем простыми). Я попробовал то, что видно в коде ниже (lambda wildcards: data.loc[(wildcards.sample),'read1']). Это, однако, дает мне ошибку

"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}"

1 Ответ

2 голосов
/ 15 апреля 2020

В настоящее время output файлы rule fastqc не имеют подстановочных знаков после их разрешения. То есть в настоящее время в файле snake есть одно задание, в котором 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}"
...