Дайте символьную строку для определения зависимости файла в Drake
Я учу Дрейка, чтобы определить мой рабочий процесс анализа, но у меня проблемы с получением файлов данных в качестве зависимостей.
Я использую функцию file_in()
внутри drake_plan()
но это работает только если я даю путь к файлу напрямую. Если я дам это с file.path()
функция или с переменной, хранящей этот путь к файлу, это не работает.
Примеры:
# preparation
library(drake)
path.data <- "data"
dir.create(path.data)
write.csv(iris, file.path(path.data, "iris.csv"))
Рабочий план:
# working plan
working_plan <-
drake_plan(iris_data = read.csv(file_in("data/iris.csv")),
strings_in_dots = "literals")
working_config <- make(working_plan)
vis_drake_graph(working_config)
Этот план отлично работает, и файл data/iris.csv
рассматривается как зависимость
Не рабочий план:
# not working
notworking_plan <-
drake_plan(iris_data = read.csv(file_in(file.path(path.data, "iris.csv"))),
strings_in_dots = "literals")
notworking_config <- make(notworking_plan)
vis_drake_graph(notworking_config)
Здесь он пытается прочитать файл iris.csv
вместо data/iris.csv
,
Работает, но проблема с зависимостью:
# working but "data/iris.csv" is not considered as a dependency
file.name <- file.path(path.data, "iris.csv")
notworking_plan <-
drake_plan(iris_data = read.csv(file_in(file.name)),
strings_in_dots = "literals")
notworking_config <- make(notworking_plan)
vis_drake_graph(notworking_config)
Последний работает нормально, но файл не считается зависимостью, поэтому Drake не перезапускает план, если этот файл изменен.
Итак, есть ли способ отличить зависимости файлов Drake от переменных?
1 ответ
После ответа от разработчиков на Github код в file_in()
не оценивается, поэтому не возможно использовать file.path
в этом.
За время, если вы добавите !!
напротив file.path()
, он будет оцениваться, а не цитироваться.
Также в новой версии drake strings_in_dots = "literals"
Аргумент устарел.
library(drake)
path.data <- "data"
dir.create(path.data)
write.csv(iris, file.path(path.data, "iris.csv"))
# now working
notworking_plan <-
drake_plan(iris_data = read.csv(file_in(!!file.path(path.data, "iris.csv"))))
notworking_plan
#> # A tibble: 1 x 2
#> target command
#> <chr> <expr>
#> 1 iris_data read.csv(file_in("data/iris.csv"))
Создано 08.05.2019 пакетом REPEX (v0.2.1)