在我的过程的第一步中,我将从数据库中提取一些每小时的数据。由于某些原因,数据有时会丢失几个小时,从而形成文件。只要丢失的文件数量不是太大,我仍然希望运行一些依赖于该数据的规则。运行这些规则时,我将检查丢失了多少数据,然后决定是否要生成错误。
下面的例子。 Snakefile
:
rule parse_data:
input:
"data/1.csv", "data/2.csv", "data/3.csv", "data/4.csv"
output:
"result.csv"
shell:
"touch {output}"
rule get_data:
output:
"data/{id}.csv"
shell:
"Rscript get_data.R {output}"
还有我的get_data.R
脚本:
output <- commandArgs(trailingOnly = TRUE)[1]
if (output == "data/1.csv")
stop("Some error")
writeLines("foo", output)
即使缺少某些输入,如何强制运行规则parse_data
?当输入丢失时,我不想强制运行任何其他规则。
一种可能的解决方案是,当查询失败时,在get_data.R
中生成一个空文件。但是,实际上,我在运行--restart-times 5
时也使用snakemake
,因为由于数据库超时,查询也可能失败。创建空文件时,此重试查询机制将不再起作用。
答案 0 :(得分:2)
您需要data-dependent conditional execution。
在get_data
上使用检查点。然后,您将parse_data
的输入替换为一个函数,该函数会汇总所有确实存在的文件。
(请注意,我是Snakemake的新手,我自己正在学习,希望对您有帮助)