Ошибка строковых индексов в snakefile при переходе с JSON на файл конфигурации yaml - PullRequest
1 голос
/ 11 июня 2019

Я написал простой конвейер ChIP-seq в Snakemake, используя файл конфигурации в формате JSON, и пробный прогон прошел, как и ожидалось.После прочтения лучших рекомендаций я переключился на файл конфигурации в формате yaml и внес соответствующие изменения, но теперь получаю «строковые индексы должны быть целыми ошибками».

Конвейер работаетTrimmomatic, FastQC, Bowtie2 и MACS2 максимально используют обертки.Для простоты я включил только код Trimmomatic и FastQC, так как думаю, что проблема заключается в чтении файла конфигурации.Файл конфигурации содержит примеры (три файла csv), каталоги (для создания согласованной структуры каталогов), базовое имя выходного файла и данные последовательности (геном и т. Д.).

config.yaml

---

samples:
  sample_names:samples.csv
  sample_files:files.csv
  sample_comparisons:comps.csv
directories:
  base_dir: /base/
  sample_dir: Samples/
  seq_dir: Raw_Sequences/
  trim_dir: Sequences/
  aln_dir: Alignments/
  peak_dir: Peak_Calling/
  logs_dir: Logs/
out_base: base
ref_seq_data:
  genome:<genome directory>
  bt2_index:<bowtie2 index directory>

...

Snakefile

import pandas as pd

shell.prefix("set -euo pipefail; ")

configfile: "config.yaml"

sample_names = config["samples"]["sample_names"]
sample_files = config["samples"]["sample_files"]
sample_comparisons = config["samples"]["sample_comparisons"]
base_dir = config["directories"]["base_dir"]
sample_dir = config["directories"]["base_dir"]+config["directories"]["sample_dir"]
seq_dir = config["directories"]["seq_dir"]
trim_dir = config["directories"]["sample_dir"]+config["directories"]["trim_dir"]
aln_dir = config["directories"]["sample_dir"]+config["directories"]["aln_dir"]
peak_dir = config["directories"]["sample_dir"]+config["directories"]["peak_dir"]
log_dir = config["directories"]["sample_dir"]+config["directories"]["logs_dir"]
genome = config["ref_seq_data"]["genome"]
out_base = config["out_base"]

samples = pd.read_csv(sample_names, index_col="sample")
files = pd.read_csv(sample_files, index_col = "sample")
comparisons = pd.read_csv(sample_comparisons)

rule all:
  input:
    expand(log_dir+"{sample}_{read}_fastqc.html", sample = samples, read = [1,2])

# Load Rules

include: "Snakemake_rules/NGS_QC.smk"

Полученное сообщение об ошибке:

TypeError в строке 7 Snakefile: строковые индексы должны быть целыми числами

При использовании файла конфигурации в формате JSON он не разбивался на группы (каждая строка была автономной), и при вызове этих строк с помощью config [] он правильно назначал правильные значения.

Большинство изобсуждение, которое я видел по этому поводу, включает итерацию, поэтому я не уверен, почему здесь возникает ошибка при использовании файла в формате yaml.

1 Ответ

1 голос
/ 11 июня 2019

Проблема в вашем файле config.yaml.

samples:
  sample_names:samples.csv
  sample_files:files.csv
  sample_comparisons:comps.csv

Ключи и значения должны быть разделены двоеточием и пробелом.Я предполагаю, что в вашем случае YAML-парсер обрабатывает секцию samples не как словарь, а как список строк: config["samples"] == ["sample_names:samples.csv", "sample_files:files.csv", "sample_comparisons:comps.csv"].

Правильная конфигурация должна быть:

samples:
  sample_names: samples.csv
  sample_files: files.csv
  sample_comparisons: comps.csv
...