Моя основная рекомендация здесь - использовать относительные пути вместо абсолютных. Если вы когда-либо использовали пакет here
, это та же идея. Но вместо того, чтобы писать file.path(here::here(), "path/to/file.txt")
, я рекомендую записать file_in("path/to/file.txt")
в плане, предполагая, что вы собираетесь вызвать drake::make()
, когда ваш рабочий каталог - path
.
Это на будущее. В вашей текущей ситуации прямо сейчас, если вы абсолютно уверены, что все файлы обновлены, и вы не хотите тратить время на восстановление целевых объектов, вы можете использовать make(plan, trigger = trigger(command = FALSE, file = FALSE)
, чтобы указать drake
перестать беспокоиться о том, изменятся ли команды или файлы. (Почему команды? Потому что там будут file_in()
вызовы, и я предполагаю, что вы меняете пути внутри.)
Редактировать
Теперь я понимаю, что не полностью понял ваш вопрос в первый раз. Но поскольку я работаю с данными так же, как и вы, думаю, ответ есть. Допустим, у вас есть такой план:
plan <- drake_plan(
data = get_data(file_in("DRIVE_NAME/file.db"))
)
И ваша точка монтирования изменится, и она будет выглядеть так:
plan <- drake_plan(
data = get_data(file_in("DIFFERENT_MOUNT_POINT/file.db"))
)
Как вы отметили, борьба идет на этом меняющемся пути. Здесь вы можете вручную отслеживать файл с помощью триггера «изменить» < / а>. Таким образом, нам не понадобится file_in()
. Во-вторых, используйте ignore()
вокруг изменяющегося пути, чтобы drake
считал, что команда осталась прежней. Нет лишнего аннулирования при изменении точек монтирования.
plan <- drake_plan(
data = target(
get_data(ignore("WHATEVER_MOUNT_POINT/file.db")),
trigger = trigger(change = file.mtime("WHATEVER_MOUNT_POINT/file.db"))
)
)
Теперь, когда изменяется время модификации, данные становятся недействительными. Но вы можете изменить WHATEVER_MOUNT_POINT
без признания его недействительным. Обычно я бы выбрал хэш файла для триггера (это то, что file_in()
говорит drake
делать в качестве последнего результата), но я выбрал для вас отметку времени, потому что file.mtime()
работает быстро, ваши данные большие и почти никогда не меняются.
person
landau
schedule
12.12.2019
drake
(версия GitHub, `remotes :: install_github (ropensci / drake)). - person landau   schedule 22.02.2020