首页 > 解决方案 > 什么是弗尔的“黑魔法”?

问题描述

我使用 R 包furrr来满足我的大部分并行化需求,并且基本上从来没有将东西从我的全局环境导出到集群的问题。今天我做到了,我不知道为什么。包文档似乎将全局变量发送到集群的过程描述为“黑魔法”。黑魔法是什么?

furrr::future_options文档说:

全局变量和包 默认情况下,future 包将执行黑魔法来查找您的 furrr 调用所需的全局变量和包,并将这些导出到每个工作人员。但是,它并不总是完美的,可以使用 globals 和 packages 参数进行改进。

作为第二个问题:是否有一种优雅的方式来告诉它使用它的黑魔法,同时导出它错过的东西?或者,选择a)全是黑魔法,还是b)对.options参数中的所有内容进行硬编码?

标签: renvironment-variablesfurrr

解决方案


这并不能完全回答问题,但我认为它为您指明了正确的方向。从这个介绍小插图的“全局”部分:

它在globals包的帮助下做到这一点,该包使用静态代码检查来识别全局变量。如果识别出全局变量,则将其捕获并提供给评估过程。

还有这个“解决方案的常见问题”小插图(@michael 在上面有用地链接)讨论了由 globals 包中的静态代码 eval 产生的一些常见“问题”。

我在这里找到了方法,因为我的future_map()代码无法找到我在glue()调用中引用的变量。那个小插曲准确地解释了为什么会发生这种情况。

至于为什么您的代码有时有效,有时无效,很难说。但正如您所看到的,引擎盖下发生了足够的复杂性,如果一些看似无关的更改破坏了某些东西,我并不感到惊讶。(对我来说,这个改变是清理我的代码并使用glue而不是paste:shrug :)


推荐阅读