#python #linux #config #bioinformatics #snakemake
Вопрос:
По сути, я хочу иметь возможность доступа к метаданным из табличных данных в моем файле конфигурации. На данный момент я делаю что-то простое, например, получаю доступ к макету образца SE или PE и печатаю его в текстовый файл, а позже я сделаю что-то немного более сложное. Однако….. Я не уверен, почему я получаю ошибку, вот что у меня есть до сих пор..
У меня есть табличные данные, которые выглядят следующим образом, с именем sample.tab:
Sample Layout SRR11213896 SE ERR3887380 PE
А это мой конфигурационный файл, config.yaml:
sample_file: "sample.tab"
А это мой Змеиный файл:
configfile: "config.yaml" import pandas as pd sample_file = config["sample_file"] samples = pd.read_table(sample_file).set_index("Sample", drop = False) rule all: input: expand("{sample}.txt", sample=samples) rule rule1: output: "{sample}.txt" params: tag = lambda wc: samples[samples.Sample == wc.sample].Layout[0] shell: """ touch {output} echo {params.tag} gt; {output} """
Ошибка:
InputFunctionException in line 11 of /Dir/Snakefile: IndexError: index out of bounds Wildcards: sample=Sample
Я хочу, чтобы мои выходные данные были 2 текстовыми файлами: SRR11213896.txt содержащий «SE», и ERR3887380.txt содержащий «PE»…..
Я застрял на этом уже несколько часов.. у кого — нибудь есть какие-нибудь идеи? Это было бы так высоко оценено.
Ответ №1:
Я подозреваю, что у вас здесь проблема:
expand("{sample}.txt", sample=samples)
потому samples
что это фрейм данных. Может быть, ты хочешь:
expand("{sample}.txt", sample=samples.Sample)
кроме того, для отладки добавьте print
инструкцию, чтобы проверить, правильно ли обработан фрейм данных:
samples = pd.read_table(sample_file).set_index("Sample", drop = False) print(samples)
Комментарии:
1. Мне это кажется правильным. Я мог бы предложить больше ориентироваться в вашем индексе выборки (и разрешить
drop=True
set_index()
вызов). Вы можете расширить использованиеexpand(..., sample=samples.index)
и позже получить прямой доступ к своим данным.loc
. напр.:tag=lambda wc: samples.loc[wc.sample, 'Layout']