问题描述
我有一个大致形式的计划,如下所示 我的实际计划更加复杂,而且我无法在 玩具的例子。 有没有人看到过这样的问题,您对可能导致该问题的原因有任何想法吗? 该计划采用了一组模型结果,生成了一些绘图的摘要并为每个绘图生成报告。
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),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),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),.id = model)
)
)
vis_drake_graph(plan)