Я использую рабочий процесс Drake для обработки ~ 100 файлов, которые хранятся в месте с очень длинными именами файлов. Эти длинные имена файлов затрудняют чтение графа зависимостей. Вот минимальный пример:
# example setup
library(drake)
very_long_path <- "this_is_a_very_long_file_path_which_makes_the_dependency_graph_hard_to_read"
dir.create(very_long_path)
filenames <- paste0("file_", seq(4), ".csv")
for (file in filenames) {
file.create(file.path(very_long_path, file))
}
files <- list.files(very_long_path, full.names = TRUE)
ids <- rlang::syms(filenames)
# my drake plan
plan <- drake_plan(
raw = target(
read.csv(file_in(!!file)),
transform = map(file = !!files)
)
)
plan
## A tibble: 4 x 2
# target command
# <chr> <expr>
#1 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#2 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#3 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#4 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
vis_drake_graph(drake_config(plan)) ## very hard to read
Я читал о .id
в ?transformations
следующее:
Символ или вектор символов, обозначающих группирующие переменные, которые необходимо включить в целевые имена. Полезно для создания коротких имен целей. Установите .id = FALSE, чтобы использовать целочисленные индексы в качестве суффиксов имени цели.
Вот почему я создал ids
в приведенном выше коде, чтобы предоставить короткие имена для целей. Но вот изменение плана не помогло:
plan <- drake_plan(
raw = target(
readLines(file_in(!!file)),
transform = map(file = !!files,
.id = !!ids)
)
)
plan
## A tibble: 4 x 2
# target command
# <chr> <expr>
#1 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#2 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#3 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
#4 raw_this_is_a_very_long_file_path_which_makes_t~ readLines(file_in("this_is_a_very_long_file_path_whic~
Насколько я понимаю, ids
- это вектор символов, поэтому я не понимаю, почему это не работает. Что мне не хватает? Это вообще возможно?
Я также попытался вставить ids
как вектор символов, но безуспешно. Я знаю, что могу установить .id = FALSE
, чтобы просто перечислять элементы raw, но я действительно хочу сохранить имена файлов.