通配符问题

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

我在平台上尝试了多种解决方案,但似乎都不起作用。我似乎无法解决错误 AttributeError: 'Wildcards' object has no attribute 'sample'

这就是我正在尝试做的事情:

import pandas as pd
sample_csv = os.path.join(BASE_DIR, "samples.csv")
sample_table = pd.read_csv(sample_csv).set_index('sample', drop=False)
def get_fq1(wildcards):
    return sample_table.loc[wildcards.sample, 'fastq1']
def get_fq2(wildcards):
    return sample_table.loc[wildcards.sample, 'fastq2']
def get_fq_files_dict(wildcards):
    return {
        "r1" : sample_table.loc[wildcards.sample, 'fastq1'],
        "r2" : sample_table.loc[wildcards.sample, 'fastq2'],
    }

rule fastp:
    input:
        unpack(get_fq_files_dict)
    output:
        expand(base_dir + "/trimmed/{sample}_trimmed.{r}.fastq.gz", sample=SAMPLES_f, # This is refined elsewhere, r=['_1','_2'])
    shell:
        """
        echo {input} # This is just a decoy command
        """

这段代码引发了我的错误

AttributeError: 'Wildcards' object has no attribute 'sample'

有人知道什么是不对的吗?

snakemake
1个回答
0
投票

我解决这个问题的方法之一就是不使用通配符。在我找到更简单的解决方案之前,这就是有效的方法。由于我使用 pandas df,我只是提供了示例名称列表,然后删除了通配符内容。我的解决方案在这里:

sample_name = ['A', 'B']
def get_fq1(sample_name:str):
    return sample_table.loc[sample_name, 'fastq1']
def get_fq2(sample_name:str):
    return sample_table.loc[sample_name, 'fastq2']
def get_fq_files_dict(sample_name:str):
    return {
        "r1" : sample_table.loc[sample_name, 'fastq1'],
        "r2" : sample_table.loc[sample_name, 'fastq2'],
    }

rule fastp:
    input:
        unpack(get_fq_files_dict)
    output:
        expand(base_dir + "/trimmed/{sample}_trimmed.fastq.gz", sample=SAMPLES_f)
    shell:
        """
        echo {input}
        """
© www.soinside.com 2019 - 2024. All rights reserved.