我成功地在远程计算机上运行了一个复杂的工作流程。在那里,我可以检查所有内容是否都是最新的,并毫无问题地探索结果。
我想将 .drake 文件夹移动到我的本地计算机,以便更轻松地浏览结果。
当我这样做(通过跨机器复制和粘贴文件夹)时,我面临的问题是本地会话认为我的所有目标都已过时。本地计算机中指向的 .drake 文件夹drake_cache()
是正确的,所以我不明白发生了什么。
我成功地在远程计算机上运行了一个复杂的工作流程。在那里,我可以检查所有内容是否都是最新的,并毫无问题地探索结果。
我想将 .drake 文件夹移动到我的本地计算机,以便更轻松地浏览结果。
当我这样做(通过跨机器复制和粘贴文件夹)时,我面临的问题是本地会话认为我的所有目标都已过时。本地计算机中指向的 .drake 文件夹drake_cache()
是正确的,所以我不明白发生了什么。
在这一点上,我认为我知道的不够多,无法自信地提供解释。是否可以分享一个可重复的小示例以便我们进行调查?
当您将工作流从一台机器复制到另一台机器时,如果您希望目标保持最新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 。