输入增加的Drake计划的工作流程

问题描述

我有一个Drake计划,该计划使用带有file_in的输入文件夹。然后读取文件夹中的每个文件并进行许多转换。最后,它加入结果。

如果添加文件,我希望计划中的新计算仅应用于该文件,然后加入先前的结果。但是,该计划要做的是:它检测到目标发生变化,然后根据该目标重新计算所有目标。

注意:文件数量很多(数千个),计算量很大。

解决方案(请查看Landau的解决方案,以获得更好的解决方案)

解决方案完成了我标记解决方案的答案:

您使用file_in()或target(format =“ file”)声明的任何文件或目录均被视为不可简化的数据单元,因此在将来的开发中,drake中的这种行为不会改变。但是您可以将文件分成多个目标,这样,如果文件发生更改,某些目标可以保持最新状态。

library(drake)

drake_plan(
  input  = target(list.files(file_in("/path/to/folder")),format="file"),target1 = target(do_stuff1(input),dynamic=map(input)) 
)

这将成为动态目标,因此新文件将创建新的动态目标,但不会重新计算旧目标。

解决方法

您用file_in()target(format = "file")声明的任何文件或目录都被视为不可还原的数据单元,并且drake中的这种行为在将来的开发中不会改变。但是您可以将文件分成多个目标,这样,如果文件发生更改,某些目标可以保持最新状态。

library(drake)
group1 <- c("file1","file2")
group2 <- c("file3","file4")
drake_plan(
  target1 = do_stuff(file_in(!!group1)),target2 = do_stuff(file_in(!!group2))
)
#> # A tibble: 2 x 2
#>   target  command                               
#>   <chr>   <expr_lst>                            
#> 1 target1 do_stuff(file_in(c("file1","file2")))
#> 2 target2 do_stuff(file_in(c("file3","file4")))

reprex package(v0.3.0)于2020-09-04创建

具有动态分支

在文件上进行动态分支比较棘手,file_in()仅适用于静态目标。即使这样,为每个文件创建动态子目标可能也不理想,因为您有成千上万个文件。最好将文件批处理成组,然后将每个组分配给一个子目标。但是,如果您仍然想动态地分支到每个文件,可以采用以下方法来确保可重复地正确跟踪每个文件的更改。

library(drake)
drake_plan(
  # Always run to get the latest set of file paths.
  untracked_files = target(
    list.files("directory_with_files",full.names = TRUE),trigger = trigger(condition = TRUE)
  ),# Map over the vector of file paths and reproducibly track each one.
  tracked_files = target(
    untracked_files,dynamic = map(untracked_files)
  ),# Map over the tracked files and analyze each one.
  analyses = target(
    do_stuff(tracked_files),dynamic = map(tracked_files)
  )
)
#> # A tibble: 3 x 4
#>   target       command                          trigger           dynamic       
#>   <chr>        <expr_lst>                       <expr_lst>        <expr_lst>    
#> 1 untracked_f… list.files("directory_with_file… trigger(conditio… NA           …
#> 2 tracked_fil… untracked_files                … NA              … map(untracked…
#> 3 analyses     do_stuff(tracked_files)        … NA              … map(tracked_f…

reprex package(v0.3.0)于2020-09-17创建

由于targets,这在tarchetypes::tar_files()中稍微容易一些。

相关问答

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