Доступ к табличным данным в Snakemake

#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']