Дайте символьную строку для определения зависимости файла в 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)

Другие вопросы по тегам