- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个复杂的工作流程,我逐渐扩展了它。最后一个扩展导致 AmbiguousRuleException
。我试图在以下示例中重现工作流的关键结构:
NUMBERS = ["1", "2"]
LETTERS = ["a", "b", "c"]
WORDS = ["foo", "bar", "baz"]
CHOICES = ["yes", "no"]
rule all:
input:
# (1)
expand("results/allthings/{word}_{choice}.md5sum", word=WORDS, choice=CHOICES)
#expand("results/allthings/{word}_{choice}.md5sum", word=WORDS + ["all"], choice=CHOICES)
rule make_things:
output:
"results/{letter}_{number}/{word}_{choice}.txt"
shell:
"""
echo "{wildcards.letter}_{wildcards.number}_{wildcards.word}_{wildcards.choice}" > {output}
"""
rule gather_things:
input:
expand("results/{letter}_{number}/{{word}}_{{choice}}.txt", letter=LETTERS, number=NUMBERS)
output:
"results/allthings/{word}_{choice}.txt"
shell:
"""
cat {input} > {output}
"""
# (2)
#rule join_all_words:
# input:
# expand("results/allthings/{word}_{{choice}}.txt", word=WORDS)
# output:
# "results/allthings/all_{choice}.txt"
# shell:
# """
# cat {input} > {output}
# """
# (3)
#def source_data(wildcards):
# if wildcards.word == "all":
# return rules.join_all_words.output
# else:
# return rules.gather_things.output
rule compute_md5:
input:
# (4)
rules.gather_things.output,
#source_data
output:
"results/allthings/{word}_{choice}.md5sum"
shell:
"""
md5sum {input} > {output}
"""
以上状态是有效的。切换(1)
和(4)
并取消注释(2)
和(3)
对应扩展I正在尝试制作,并导致以下失败:
AmbiguousRuleException:
Rules gather_things and join_all_words are ambiguous for the file results/allthings/all_yes.txt.
Expected input files:
gather_things: results/a_1/all_yes.txt results/a_2/all_yes.txt results/b_1/all_yes.txt results/b_2/all_yes.txt results/c_1/all_yes.txt results/c_2/all_yes.txt
join_all_words: results/allthings/foo_yes.txt results/allthings/bar_yes.txt results/allthings/baz_yes.txt
似乎snakemake认为results/allthings/all_yes.txt
可以通过gather_things
生成。
为什么?
我怎样才能避免这种情况?
注意:修改 (3)
和 (4)
的目的是让 compute_md5
在 的直接输出上工作code>gather_things
(对于 foo
、bar
和 baz
)以及三者的合并输出(all
code>),尽可能保持根据其他规则的输出定义输入(这比显式使用文件名时更容易进行更改)。
最佳答案
2017-07-28 为简洁起见编辑了帖子
起初我以为这只是模棱两可。前三点与解决歧义有关。之后,我将解释如何概括“compute_md5”以实现所需的行为。
1) 控制歧义流:
我建议在以下情况下避免这种情况。在模块化的宏伟希望中,通过使用“ruleorder”,您实际上是将两个规则耦合在一起。只有在 Snakefile 的范围内存在两个规则时,才能使用“规则顺序”功能。如果规则并不总是一起提供,这可能是模块化的问题。如果它们的规则总是一起提供,我认为它们已经耦合,这样做不会使情况变得更糟,事实上,会增加凝聚力。当使用“约束”还不够时使用“规则顺序”,因为有时哪里会不可避免地出现歧义。
https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)
条件“包含” https://github.com/tboyarski/BCCRC-Snakemake/tree/master/modules/bamGen
规则顺序在“_INCLUDE”中sam2BAM 和 bamALIGN_bwa 的输出非常相似,主要是因为 sam2BAM 非常通用。
因为 bamALIGN_bwa 和 bamALIGN_star 在技术上是可以切换的,而且我不希望用户只是为了在它们之间切换而交换规则顺序,所以我有一个 bool 值存储在我的 YAML 文件中,作为一个硬过滤器来防止 Snakemake即使看到规则。这在您只能选择一个或另一个的情况下非常有效(在这种情况下,两个比对器都有自己的引用基因组。我强制用户在我的管道开始时设置引用基因组,这样用户就永远不会实际运行两者。我还没有实现检测正在使用哪个引用基因组的功能,以便选择相应的对齐器。这将是一些开销 python 代码,好主意,但目前尚未实现)。
2) 要求 Snakemake 忽略歧义。
有超车。它存在,但我认为应尽可能避免“--allow-ambiguity”。
3) 优雅地~防止歧义。
rule gather_things:
input:
expand("results/{letter}_{number}/{{word}}_{{choice}}.txt", letter=LETTERS, number=NUMBERS)
output:
"results/allthings/{word}_{choice}.txt"
wildcard_constraints:
word='[^(all)][0-9a-zA-Z]*'
...
此规则需要一个 wildcard_constraint,以防止它与“join_all_words”规则竞争。这可以通过防止此处的通配符“word”成为字符串“all”来轻松完成。这使得“gather_things”和“join_all_words”可区分。
至于让“compute_md5”接受来自“gather_things”和“join_all_words”的输入,这需要使其更通用,与歧义无关。接下来您需要做的是调整“join_all_words”规则,使其不依赖于任何给定规则的输入。
https://github.com/tboyarski/BCCRC-Snakemake/blob/master/help/download.svg
我还要感谢您提供了一个 TOP-NOTCH 示例。太棒了!
NUMBERS = ["1", "2"]
LETTERS = ["a", "b", "c"]
WORDS = ["foo", "bar", "baz"]
CHOICES = ["yes", "no"]
rule all:
input:
expand("results/allthings/all_{choice}.md5sum", choice=CHOICES),
expand("results/allthings/{word}_{choice}.md5sum", word=WORDS, choice=CHOICES)
rule make_things:
output:
"results/{letter}_{number}/{word}_{choice}.txt"
shell:
"""
echo "{wildcards.letter}_{wildcards.number}_{wildcards.word}_{wildcards.choice}" > {output}
"""
rule gather_things:
input:
expand("results/{letter}_{number}/{{word}}_{{choice}}.txt", letter=LETTERS, number=NUMBERS)
output:
"results/allthings/{word}_{choice}.txt"
wildcard_constraints:
word='[^(all)][0-9a-zA-Z]*'
shell:
"""
cat {input} > {output}
"""
rule join_all_words:
input:
expand("results/allthings/{word}_{{choice}}.txt", word=WORDS)
output:
"results/allthings/all_{choice}.txt"
shell:
"""
cat {input} > {output}
"""
rule compute_md5:
input:
"{pathCMD5}/{sample}.txt"
output:
"{pathCMD5}/{sample}.md5sum"
#"results/allthings/{word}_{choice}.md5sum"
shell:
"""
md5sum {input} > {output}
关于snakemake - 理解和克服 snakemake 中的 AmbiguousRuleException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333179/
我想使用 Snakemake 使用 SRR ID 从 SRA 数据库下载 fastq 文件。我读取了一个文件以使用 python 代码获取 SRR ID。 我想一个一个解析Variable作为输入。我
这更多是关于 snakemake 功能的技术问题。我想知道是否可以在 snakemake 运行期间动态更改输入样本集。 我想这样做的原因如下:让我们假设一组样本相关的 bam 文件。第一条规则确定每个
我正在创建一个 snakemake 管道,在某些时候,我可以在其中过滤我的结果。但是我可以应用两种过滤器,所以我想在启动管道时将其作为参数提供,然后根据参数,我想应用一个或另一个规则。 举个例子: s
我有以下 Snakemake 文件: rule test: params: a = "a" shell: "echo {params.a}" 按预期工作
我有以下 Snakemake 文件: rule test: params: a = "a" shell: "echo {params.a}" 按预期工作
我有一个复杂的工作流程,我逐渐扩展了它。最后一个扩展导致 AmbiguousRuleException。我试图在以下示例中重现工作流的关键结构: NUMBERS = ["1", "2"] LETTER
上下文 规则 A 在 shell 指令中使用 split 命令。rule A 生成的文件数量取决于用户在配置中指定的值,因此是已知的。 在this question存在差异,因为输出文件的数量未知,但
我正在尝试创建一种简单的方法来在一个规则中创建工作流所需的所有子目录。但是,每当我尝试执行在工作流顶部创建所有必需目录的规则时,我都会收到 ChildIOException ,这对我来说毫无意义: B
我有一个 Snakemake 规则,适用于数据存档并本质上解压其中的数据。文件包含我在规则开始之前知道的不同数量的文件,因此我想利用它并执行类似的操作 rule unpack: input:
我想将每个 snakemake 作业执行的 shell 命令保存到日志文件中。 使用 --printshellcmds 我可以在提交时将 shell 命令打印到标准输出,但我想将它们保存到单独的文件中
我有一个很长的蛇形工作流程,处理 9 个具有许多并行规则的样本。当我为 DAG 创建图片时: snakemake --forceall --dag | dot -Tpdf > dag.pdf 生成的
我有一个奇怪的问题,它来来去去,我真的不知道什么时候以及为什么。 我正在运行这样的蛇形管道: conda activate $myEnv snakemake -s $snakefile --co
在snakemake 中,我想从config 访问 key 。从内部shell:指示。我可以用 {input.foo} , {output.bar} , 和 {params.baz} ,但是 {con
在我的第一次运行中,我有两类样本要由不同的参数处理,然后在第二次运行中将它们合并在一起。像下面的例子: SAMPLES = ['1', '2', '3'] CLASS1 = ['1', '2'] CL
我想问 Snakemake 社区是否有人在 AWS Batch 中成功实现了 Snakemake 工作流程。 2018 年 10 月最近发布的第 4 页似乎表明 Snakemake 在 AWS 上不起
问题很简单: 我想从规则调用脚本,并且我希望该规则同时适用于: 执行 stdout 和 stderr 重定向 从脚本中访问snakemake变量(变量可以是列表和文字) 如果我使用 shell:,那么
由于 conda 环境未处于事件状态,工作流的一些非常晚的作业崩溃了。 现在,当我尝试使用 snakemake deploy_all --ignore-incomplete 重新运行时,所有作业都直接
我开始尝试在 Snakemake 中使用容器,我有一个问题,什么需要预先构建到容器中,什么不需要。例如: 我想在一个容器中运行一个 python 脚本(例如,存储在 workflow_root/scr
以下蛇形脚本: rule all: input: 'test.done' rule pipe: output: 'test.done' shell:
我使用的所有脚本都将输出文件放在调用脚本的当前目录中,因此在我的 shell 脚本管道中,我会让 cd 命令转到特定目录以运行命令,而输出文件将仅保存在相关目录中。我的脚本没有输出目录的参数,大多数脚
我是一名优秀的程序员,十分优秀!