Возможно, это не очевидно, но файловые цели динамического c неуменьшаемы. Если c("a.csv", "b.csv")
- ваш динамический c файл, вы не можете разбить его на "a.csv"
и " b.csv"
. drake
хранит глобальный ha sh всех этих файлов вместе и не отслеживает хеши или временные метки для каждого файла отдельно. Это помогает drake
оставаться эффективным, даже если вы возвращаете большое количество динамических c файлов из одной цели.
Решение состоит в том, чтобы сделать "a.csv"
и "b.csv"
двумя разными динамическими c файлами цели с использованием динамического c map()
. Вам нужна дополнительная цель в начале, чтобы содержать имена путей, но она выполняет свою работу.
library(drake)
library(tidyverse)
content <- tibble(x1 = 1, x2 = 1)
walk(list("a", "b"), ~ write_csv(x = content, path = paste0(., ".csv")))
read_csv("b.csv", col_types = "dd")
#> # A tibble: 1 x 2
#> x1 x2
#> <dbl> <dbl>
#> 1 1 1
plan <- drake_plan(
import_paths = c("a.csv", "b.csv"),
import_files = target(
import_paths,
format = "file",
dynamic = map(import_paths)
),
data = target(
read_csv(import_files, col_types = "dd"),
dynamic = map(import_files)
)
)
make(plan)
#> ▶ target import_paths
#> ▶ dynamic import_files
#> > subtarget import_files_4209ea92
#> > subtarget import_files_b8419eb2
#> ■ finalize import_files
#> ▶ dynamic data
#> > subtarget data_b59aea49
#> > subtarget data_e6b8ef3e
#> ■ finalize data
readd(data)
#> # A tibble: 2 x 2
#> x1 x2
#> <dbl> <dbl>
#> 1 1 1
#> 2 1 1
walk(list("b"), ~ write_csv(x = content + 1, path = paste0(., ".csv")))
read_csv("b.csv", col_types = "dd")
#> # A tibble: 1 x 2
#> x1 x2
#> <dbl> <dbl>
#> 1 2 2
make(plan)
#> ▶ dynamic import_files
#> > subtarget import_files_b8419eb2
#> ■ finalize import_files
#> ▶ dynamic data
#> > subtarget data_a0f1c4f0
#> ■ finalize data
readd(data)
#> # A tibble: 2 x 2
#> x1 x2
#> <dbl> <dbl>
#> 1 1 1
#> 2 2 2
Создано 06.08.2020 с помощью пакета репекс (v0.3.0)