r - Drake 仅在某些情况下缺少来自静态分支的依赖项
问题描述
我有一个通用形式的计划,如下所示。我的实际计划更复杂,我无法在玩具示例中重现此错误。有没有人见过这样的问题,你对可能导致它的原因有什么想法吗?该计划采用一组模型结果,生成一些图表的摘要并为每个图表生成报告。
dplan <- drake_plan(
models = target(
read_models(model),
map(model = c("a","b","c"))
),
dep1 = target(
summarise_models(models),
map(models)
),
dep2 = target(
plot_models(models),
map(models)
),
report = target(
write_report(dep1, dep2),
map(dep1, dep2)
)
)
目标 dep1_a-c 和 dep2_a-c 已生成,但 dep2 存在问题 dep2_a-c 出现在图中,但 report_a-c 未显示为取决于它们,因为它们分别位于 dep1_a-c 上。也就是说,生成了 dep1_a 并且 report_a 依赖于它,而生成了 dep2_a,尽管 dep2 在map
报告目标中的调用中,但 report_a 并不“相信”它依赖于 dep2_a。
我在运行时遇到make
的错误是以下形式的错误:
$error$message: object 'dep2' not found
$error$calls:base::eval(quote(...
并且引用显示 dep2 没有在调用中评估 dep2_a 等,它只是裸 dep2 当然作为目标存在,只有 dep2_a-c '我很困惑为什么这会发生在一个目标而不是其他目标上:(
我的真实示例有几个依赖项,并且我的示例中的 dep2 等效项在输出中几乎相同,它们返回映射到同一列表上的相同类型的对象,但由于某种原因,它们的目标在制作报告目标时未正确评估
我试过clean(destroy = TRUE)
从头开始运行和重新运行,但没有运气
解决方案
对于未来的项目,我建议逐步建立计划,以避免事情失控。如果一次将所有目标都写在计划中,很容易不知所措。用户应该:
- 写 1 或 2 个目标。
- 检查计划,例如
vis_drake_graph()
或plot(plan)
。 - 运行
make(plan)
。 readd()
使用和/或loadd()
(探索性分析)检查输出。- 重复。
有关此迭代过程的示例,请参阅https://wlandau.github.io/learndrake。
您上面写的计划没有任何问题,因此很难推测您的实际计划可能有什么问题。但好消息是您应该能够在不运行make()
的情况下进行故障排除。vis_drake_graph()
如果某些依赖关系指定不正确,可以立即告诉您。这是您的示例计划的图表。
library(drake)
plan <- drake_plan(
models = target(
read_models(model),
map(model = c("a", "b"))
),
dep1 = target(
summarise_models(models),
map(models, .id = model)
),
dep2 = target(
plot_models(models),
map(models, .id = model)
),
report = target(
write_report(dep1, dep2),
map(dep1, dep2, .id = model)
)
)
vis_drake_graph(plan)
如果dep2
没有正确展开,这就是图表的样子:
library(drake)
plan <- drake_plan(
models = target(
read_models(model),
map(model = c("a", "b"))
),
dep1 = target(
summarise_models(models),
map(models, .id = model)
),
dep2 = target(
plot_models(models),
map(models, .id = model)
),
report = target(
write_report(dep1, dep2),
map(dep1, dep2, .id = model)
)
)
vis_drake_graph(plan)
推荐阅读
- angular - ERROR 错误:StaticInjectorError(AppModule)[UserformService -> HttpClient]:
- google-app-maker - 如何对其数据源是关系的表进行排序
- java - 通过 Socket 持续连接到服务器,直到建立连接
- javascript - 使用 JS/HTML 调用流注/Fom
- mysql - “解析 config/database.yml 时发生 YAML 语法错误”Ruby on Rails
- php - PostgreSQL phppgadmin 在 Cpanel 中没有触发函数
- python - django 1.11.x -> 2.x 迁移。我得到了不正确的“分组依据”字段
- eloquent - 从视图中的where子句获取关系数据
- python - BeautifulSoup 错误:列表索引超出范围
- php - 带有 Ajax 表单提交的 Laravel 5 `Internal Server Error` (500)