Snakemake和pandas语法

问题描述 投票:1回答:1

我有一个输入文件如下

SampleName Run Read1 Read2
A run1 test/true_data/4k_R1.fq test/true_data/4k_R2.fq
A run2 test/samples/A.fastq test/samples/A2.fastq
B run1 test/samples/B.fastq test/samples/B2.fastq
C run1 test/samples/C.fastq test/samples/C5.fastq
D

所以我得到一个数组中的所有索引:

sample_table    = pd.read_table('samples.tsv', sep=' ', lineterminator='\n')
sample_table    = sample_table.drop_duplicates(subset='SampleName', keep='first', inplace=False)
sample_table    = sample_table.dropna()
sample_table.set_index('SampleName',inplace=True)
sample_ID=sample_table.index.values

在这一点sample_ID=['A' 'B' 'C']这是我想要的。然后我想设置一个变量r1,它对应于每个样本的Read2的Read1和r2。

rule all:
    input:
        expand("test/fltr/{ID_sample}.fq", ID_sample=sample_ID)

rule send_reads:
    input:
        #Tried both way but it does not work 
        r1=sample_table.loc["{ID_sample}",'Read1']
        r2=sample_table.Read2["{ID_sample}"]
    output:
       "test/fltr/{ID_sample}{input.r1}.fq"
    shell:
       "touch {output}"

我收到了错误

标签[{ID_sample}]不在[index]中

这是语法错误还是更大的错误?

我刚开始使用Snakemake,我以为我在教程之后已经理解了它,但显然我没有。

非常感谢,干杯

pandas snakemake
1个回答
0
投票

lambda函数可用于获取该值。

input:
    lambda wildcards, output: sample_table.Read2[wildcards.ID_sample]

另外,根据你的rule all,你的output需要是test/fltr/{ID_sample}.fq。并且,您必须使用逗号分隔input中的两个变量。

© www.soinside.com 2019 - 2024. All rights reserved.