nested - Snakemake级联检查点不起作用
问题描述
我有以下情况
- 检查点A在文件夹中创建文件(1 或 2)
A_Out
- 检查点B将所有文件
A_Out
作为输入并生成文件(1 或 2)B_Out
- 我有条件规则C,它可以从 A 或 B 获取输入并产生最终输出
我正在使用以下代码,
checkpoint A:
output: directory("A_Out")
# Rest of the logic
def collect_a(wildcards):
path = checkpoints.A.get(**wildcards).output[0]
return expand("{path}/{file}.txt",
path=path,
file=glob_wildcards(os.path.join(path, "{name}.txt")).name)
checkpoint B:
input: collect_a
output: directory("B_Out")
# Rest of the logic
def collect_b(wildcards):
path = checkpoints.B.get(**wildcards).output[0]
return expand("{path}/{file}.txt",
path=path,
file=glob_wildcards(os.path.join(path, "{name}.txt")).name)
def conditional_input(wildcards):
if condition_A:
return collect_a(wildcards)
else:
return collect_b(wildcards)
rule c:
input: conditional_input
# Rest of the logic
在上述情况下,当 condition_a 为 时False
,它只评估检查点 B,不评估检查点 A。我该如何解决这个问题?还是有其他优雅的方式?
解决方案
这些级联检查点调用非常有问题,并且有几个与之相关的问题。如果您进一步充实您的示例,您可以向 github 提交问题,假设您拥有最新版本的蛇形。
作为一种解决方法,您可以尝试在每个目录中添加一个临时信号文件以指示规则已完成。然后,您需要在规则代码中使用 glob 通配符。
不是很好,但可以工作。因为您有一个临时输入作为信号,所以即使其他文件已经存在,规则也会每次重新运行;snakemake 不知道它们是输出。另一种选择是事先检查您的输入,以确定是否会生成一个或两个文件,并将其绑定到您的输入函数逻辑中,绕过检查点。
推荐阅读
- go - 如何使用 Colly 在 Golang 中将字符串解析为 DOM 元素
- java - Spring boot 中的 RestController - 404 ERROR 而不是 JSON 对象
- javascript - 从选择菜单中选择新位置时,如何从谷歌地图中删除图钉?
- smartcard - 使用 ant-javacard 构建 JavaCard 库
- java - 二元运算真值表
- python-3.x - 接收函数作为另一个函数的参数
- python - Python对最后一位数字进行排序?
- python - 如何在 Qt Designer 中添加 PyQt5 QMediaPlayer?
- php - Symfony4 + 部署项目
- sql - 内部选择查询返回多个值时如何显示输出?