我使用JSON格式的配置文件在Snakemake中编写了一个简单的ChIP-seq管道,并且按预期运行了试运行。进一步阅读最佳做法后,我切换到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"
我收到的错误消息是:
Snakefile的第7行中的TypeError: 字符串索引必须为整数
当使用JSON格式的配置文件时,我没有将它分成几组(每行都是独立的),当使用config []调用这些行时,它正确地分配了正确的值。
我所见过的大多数讨论都涉及迭代,因此我不确定为什么使用yaml格式的文件时会在这里发生错误。
答案 0 :(得分:1)
问题出在您的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