如何在R drake中组合和过滤动态文件目标?

问题描述

我在Drake计划中创建了一组文件。我想将这些文件的子集复制到另一个位置。

以下代码几乎可以达到目的。但是,在获取了要复制的文件目标的子集后,丢失了Drake对文件更改的依赖性跟踪。

如何在不丢失Drake依赖性跟踪的情况下合并/子集动态文件目标?

copy_file <- function(file) {
  file_copy <- paste0(file,"_copy")
  file.copy(from = file,to = file_copy,overwrite = TRUE)
  file_copy
}

herb_1_a <- "parsley"
plan <- drake::drake_plan(
  file_1 = target(
    {
      writeLines(herb_1_a,"file_1_a") # Second run
      writeLines("sage","file_1_b")
      c("file_1_a","file_1_b")
    },format = "file"
  ),file_2 = target(
    {
      writeLines("rosemary","file_2_a")
      writeLines("thyme","file_2_b")
      c("file_2_a","file_2_b")
    },files_to_copy = str_subset(
    c(file_1,file_2),"_a$"
  ),file_copies = target(
    copy_file(files_to_copy),dynamic = map(files_to_copy),format = "file"
  )
)

drake::make(plan)
#> ▶ target file_2
#> ▶ target file_1
#> ▶ target files_to_copy
#> ▶ dynamic file_copies
#> > subtarget file_copies_5e57e9ee
#> > subtarget file_copies_ae26ecf9
#> ■ finalize file_copies
readLines("file_1_a")
#> [1] "parsley"
readLines("file_1_a_copy")
#> [1] "parsley"
herb_1_a <- 'banana'
drake::make(plan)
#> ▶ target file_1
#> ▶ target files_to_copy
readLines("file_1_a")
#> [1] "banana"
readLines("file_1_a_copy") # I want this banana
#> [1] "parsley"

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

解决方法

我认为解决此问题的方法是在复制步骤之前立即创建一组动态映射的动态输入文件。换句话说,root->left->left = (*(*root).left).left 应该是动态文件的动态目标。草图:

files_to_copy

相关问答

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