【发布时间】:2019-08-27 13:38:11
【问题描述】:
我最近决定从 snakemake 开始。我在堆栈和snakemake doc 上都找不到任何适合我需要的东西。我觉得我有些不明白,我可能需要一些解释。
我正在尝试制作一个简单的 snakemake 工作流程,该工作流程将一个 fastq 文件和一个测序摘要文件(包含有关读取的信息)作为输入,并将快速中的读取过滤成几个文件(low.fastq 和 high .fastq)。
我的输入数据和我尝试执行的 Snakefile 是这样存储的:
.
├── data
│ ├── sequencing-summary-example.txt
│ └── tiny-example.fastq
├── Snakefile
└── split_fastq
这是我迄今为止尝试过的:
*imports*
rule targets:
input:
"split_fastq/low.fastq",
"split_fastq/high.fastq"
rule split_fastq:
input:
"data/{reads}.fastq",
"data/{seqsum}.txt"
output:
"split_fastq/low.fastq",
"split_fastq/high.fastq"
run:
* do the thing *
我希望有一个目录“split_fastq”,其中包含“低”和“高”fastq。但是我得到了错误:
Building DAG of jobs...
WildcardError in line 10 of /work/sbsuser/test/roxane/alignement-ont/Snakefile:
Wildcards in input files cannot be determined from output files:
'reads'
尽管这似乎是一个非常流行的错误,但我不确定我是否不了解如何使用通配符或是否存在其他问题。我是否正确使用了“输入”和“输出”?
【问题讨论】:
-
我最近回答了一个非常相似的问题:stackoverflow.com/questions/57327210/…
-
是的,我一直在阅读这个帖子,但我对您必须在工作流程中写下您的文件名这一事实感到困惑。我想将此工作流程用于任何 fastq,我不想编写路径或文件名,我想要一些动态的东西,例如有点像 -f myFastq 选项。但也许snakenamke 不是为了那个,而是更“面向特定数据集”?也许这就是我理解不正确?
-
有(至少)两个选项。首先是输出与输入具有相同的通配符。然后你可以运行类似
snakemake split_fastq/low-example.fastq的东西。另一种是你在链接中使用globbing的方式,然后会找到相关的样本,并决定需要生成哪些输出。 -
好吧,所以在我的例子中替换,我会写在输出部分 split_fastq/{reads}-low.fastq","split_fastq/{reads}high.fastq" 对吗?
-
有点,summary.txt 还需要一个通配符,每个输出都需要两个通配符(读取和 seqsum)。再次查看通配符如何工作的文档。很遗憾,我没有时间输入答案。
标签: snakemake