yaml - 使用snakemake映射读取
问题描述
我正在尝试使用snakemake 运行 hisat2 映射。基本上,我使用的是这样的 config.yaml 文件:
reads:
set1: /path/to/set1/samplelist.tab
hisat2:
database: genome
genome: genome.fa
nodes: 2
memory: 8G
arguments: --dta
executables:
hisat2: /Tools/hisat2-2.1.0/hisat2
samtools: /Tools/samtools-1.3/samtools
然后蛇文件:
configfile: "config.yaml"
workdir: "/path/to/working_dir/"
# Hisat2
rule hisat2:
input:
reads = lambda wildcards: config["reads"][wildcards.sample]
output:
bam = "{sample}/{sample}.bam"
params:
idx=config["hisat2"]["database"],
executable = config["executables"]["hisat2"],
nodes = config["hisat2"]["nodes"],
memory = config["hisat2"]["memory"],
executable2 = config["executables"]["samtools"]
run:
shell("{params.executable} --dta -p {params.nodes} -x {params.idx} {input.reads} |"
"{params.executable2} view -Sbh -o {output.bam} -")
# all
rule all:
input:
lambda wildcards: [sample + "/" + sample + ".bam"
for sample in config["reads"].keys()]
我的 samplelist.tab 是这样的:
id reads1 reads2
set1a set1a_R1.fastq.gz set1a_R2.fastq.gz
set1b set1b_R1.fastq.gz set1b_R2.fastq.gz
任何提示如何使它工作?我为一个凌乱的脚本道歉,刚开始使用snakemake。
解决方案
你将不得不做这样的事情:
import pandas as pd
reads = pd.read_csv(config["reads"]['set1'], sep='\t', index_col=0)
def get_fastq(wildcards):
return list(reads.loc[wildcards.sample].values)
rule hisat2:
input:
get_fastq
...
首先,您需要加载样本列表并将其存储(我将其作为 pandas 数据框进行)。然后您可以查找哪些文件属于该示例名称。
编辑:
重写代码看起来像这样更具可读性(在我看来)。
rule hisat2:
input:
[{sample}_R1.fastq.gz,
{sample}_R2.fastq.gz]
...
推荐阅读
- r - 为什么命令 gsort 不正确?
- python - 在单条线上绘制表面颜色变化
- matplotlib - 我怎么知道 plt.colorbar 必须“吃掉” ax.pcolor?
- c# - QBO ReportService C# 输出
- android - 如何使用 android 意图/市场 URI 打开任何商店
- ios - 如何从 MKMapView didSelect 注释更新封装的 SwiftUI 视图
- node.js - 如何从自身杀死实际运行的节点应用程序
- c++ - c ++类似的重复输入具有不同的输出
- kotlin - Mockito:使用 OK HTTP Client 模拟 HTTP 调用
- javascript - 如何从数组中提取特定值并将这些值分配给变量以在下一个邮递员请求中使用它