我在平台上尝试了多种解决方案,但似乎都不起作用。我似乎无法解决错误 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'
有人知道什么是不对的吗?
我解决这个问题的方法之一就是不使用通配符。在我找到更简单的解决方案之前,这就是有效的方法。由于我使用 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}
"""