您声明的任何文件或目录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 包(v0.3.0)于 2020 年 9 月 4 日创建
动态分支
文件上的动态分支比较棘手,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 包(v0.3.0)于 2020-09-17 创建
targets
由于tarchetypes::tar_files()
. _