如何让Snakemake与CellRanger Count批量处理多样本?报错求助
单细胞RNA-seq批量处理:Snakemake+CellRanger报错解决
问题背景
目录结构:
merged/ ├─ SC111111-TTATTCGAGG-AGCAGGACAG_merged_R1.fastq.gz ├─ SC111111-TTATTCGAGG-AGCAGGACAG_merged_R2.fastq.gz ├─ SC222222-TGCGCGGTTT-TTTATCCTTG_merged_R1.fastq.gz └─ SC222222-TGCGCGGTTT-TTTATCCTTG_merged_R2.fastq.gz
原规则代码:
rule cellranger_count: input: rules.merge_fastqs.output output: maxtrix_h5 = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix.h5', metrics = '{sampleID}_TenXAnalysis/outs/metrics_summary.csv', barcodes = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/barcodes.tsv.gz', features = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/features.tsv.gz', matrix = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/matrix.mtx.gz' threads: 16 params: ref = 'PATH/yard/apps/refdata-gex-GRCh38-2020-A', #sample_id = '{sampleID}_merged' shell: """ module load cellranger/6.1.2 rm -rf {wildcards.sampleID}_TenXAnalysis cellranger count --id={wildcards.sampleID}_TenXAnalysis \ --fastqs={input} \ --sample={wildcards.sampleID} \ --transcriptome={params.ref} \ --localcores={threads} \ --localmem=128 """
报错信息:
error: Found argument 'merged/SC111111-TTATTCGAGG-AGCAGGACAG_merged_R2.fastq.gz' which wasn't expected, or isn't valid in this context If you tried to supply `merged/SC111111-TTATTCGAGG-AGCAGGACAG_merged_R2.fastq.gz` as a PATTERN use `-- merged/SC111111-TTATTCGAGG-AGCAGGACAG_merged_R2.fastq.gz
报错原因
CellRanger的--fastqs参数要求传入存放fastq文件的目录路径,而非单个fastq文件的列表。原规则中{input}会展开为当前样本的所有fastq文件路径(两个文件),导致CellRanger将第二个文件识别为无效的未知参数,从而抛出错误。
解决方案
修改规则,让--fastqs指向merged目录,并确保输入依赖对应样本的所有fastq文件,保证规则触发的正确性:
rule cellranger_count: input: # 动态匹配当前样本的R1/R2 fastq文件,确保文件存在才执行规则 lambda wildcards: expand("merged/{sampleID}_*_merged_R{read}.fastq.gz", sampleID=wildcards.sampleID, read=[1,2]) output: matrix_h5 = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix.h5', metrics = '{sampleID}_TenXAnalysis/outs/metrics_summary.csv', barcodes = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/barcodes.tsv.gz', features = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/features.tsv.gz', matrix = '{sampleID}_TenXAnalysis/outs/raw_feature_bc_matrix/matrix.mtx.gz' threads: 16 params: ref = 'PATH/yard/apps/refdata-gex-GRCh38-2020-A', fastq_dir = 'merged' # 直接指定fastq文件所在目录 shell: """ module load cellranger/6.1.2 rm -rf {wildcards.sampleID}_TenXAnalysis cellranger count --id={wildcards.sampleID}_TenXAnalysis \ --fastqs={params.fastq_dir} \ --sample={wildcards.sampleID} \ --transcriptome={params.ref} \ --localcores={threads} \ --localmem=128 """
关键修改说明
- 输入依赖调整:使用
lambda函数+expand动态匹配当前样本的R1/R2文件,保证规则仅在对应样本的fastq文件存在时触发,避免依赖缺失。 - --fastqs参数修正:改为传入
merged目录路径,CellRanger会自动在该目录下查找文件名包含--sample指定的样本ID的fastq文件(你的文件名格式刚好包含样本ID,匹配逻辑成立)。 - 参数可读性优化:将目录路径定义在
params中,提升代码可维护性。
内容的提问来源于stack exchange,提问作者Genetics
相关产品推荐
相关产品推荐

