1

我成功地在远程计算机上运行了一个复杂的工作流程。在那里,我可以检查所有内容是否都是最新的,并毫无问题地探索结果。

我想将 .drake 文件夹移动到我的本地计算机,以便更轻松地浏览结果。

当我这样做(通过跨机器复制和粘贴文件夹)时,我面临的问题是本地会话认为我的所有目标都已过时。本地计算机中指向的 .drake 文件夹drake_cache()是正确的,所以我不明白发生了什么。

4

1 回答 1

0

在这一点上,我认为我知道的不够多,无法自信地提供解释。是否可以分享一个可重复的小示例以便我们进行调查?

当您将工作流从一台机器复制到另一台机器时,如果您希望目标保持最新drake,通常仅复制文​​件夹是不够的。.drake我强烈建议您复制整个项目,包括代码文件(和file_in()/ file_out()/knitr_in()文件,如果您声明了任何文件)。我知道这可能看起来违反直觉,但每个目标的状态取决于当时加载到 R 会话中的函数和其他对象,因此make()也需要复制支持脚本和调用的源代码。我建议查看https://books.ropensci.org/drake/projects.html,尤其是https://books.ropensci.org/drake/projects.html#safer-interactivity。你的运气可能r_make()比普通的好make()

如果你使用命名空间函数调用(例如pkg::fun()),那么你还应该确保你的包环境在机器之间是一致的。事实上,无论如何,两台机器都应该有相同版本的 R 和相同的包环境。renv非常适合锁定项目的包环境。

为了获得更多的可移植性,容器化真的很有帮助。示例:https ://gitlab.com/ecohealthalliance/drake-gitlab-docker-example 。

于 2020-01-19T13:08:04.030 回答