仅在某些情况下,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),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. 写1或2个目标。
  2. 检查计划,例如vis_drake_graph()plot(plan)
  3. 运行make(plan)
  4. 使用readd()和/或loadd()检查输出(探索性分析)。
  5. 重复。

有关此迭代过程的示例,请参见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)

enter image description here

如果dep2未正确展开,则图形将如下所示:

library(drake)
plan <- drake_plan(
  models = target(
    read_models(model),.id = model)
  )
)
vis_drake_graph(plan)

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...