什么是Furr';s";黑魔法;

什么是Furr';s";黑魔法;,r,environment-variables,furrr,R,Environment Variables,Furrr,我使用R包furr满足我的大部分并行化需求,并且基本上从不存在将东西从全局环境导出到集群的问题。今天我做到了,我不知道为什么。包文档似乎将全局变量发送到集群的过程描述为“黑魔法”。黑魔法是什么 furr::future_options文档说明: 全局变量和包 默认情况下,future包将执行黑魔法来查找furr调用所需的全局变量和包,并将这些导出到每个worker。然而,它并不总是完美的,并且可以使用globals和packages参数进行优化 作为第二个问题:有没有一种优雅的方式告诉它去做它的

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

furr::future_options
文档说明:

全局变量和包 默认情况下,future包将执行黑魔法来查找furr调用所需的全局变量和包,并将这些导出到每个worker。然而,它并不总是完美的,并且可以使用globals和packages参数进行优化


作为第二个问题:有没有一种优雅的方式告诉它去做它的黑魔法,但也要出口它错过的东西?或者,选项a)都是黑魔法,还是b)在
.options
参数中都是硬编码?

这并不能完全回答问题,但我认为它为您指明了正确的方向。从以下内容的“全局”部分:

它是在包的帮助下完成的,包使用静态代码检查来识别全局变量。如果确定了全局变量,则会捕获该变量并将其提供给评估过程

还有(上面@michael链接的内容)讨论了globals包中静态代码eval产生的一些常见“gotcha”问题

我在这里找到了自己的方法,因为我的
future\u map()
code未能找到我在
glue()调用中引用的变量。这个小插曲正好解释了为什么会发生这种情况


至于为什么你的代码有时有效,有时无效,很难说。但正如你所看到的,在幕后有着足够的复杂性,如果一些看似无关的变化破坏了某些东西,我并不感到惊讶。(对我来说,这一变化是清理我的代码,并使用
胶水
而不是
粘贴
:耸耸肩:)

这并不能完全回答问题,但我认为它为你指明了正确的方向。从以下内容的“全局”部分:

它是在包的帮助下完成的,包使用静态代码检查来识别全局变量。如果确定了全局变量,则会捕获该变量并将其提供给评估过程

还有(上面@michael链接的内容)讨论了globals包中静态代码eval产生的一些常见“gotcha”问题

我在这里找到了自己的方法,因为我的
future\u map()
code未能找到我在
glue()调用中引用的变量。这个小插曲正好解释了为什么会发生这种情况


至于为什么你的代码有时有效,有时无效,很难说。但正如你所看到的,在幕后有着足够的复杂性,如果一些看似无关的变化破坏了某些东西,我并不感到惊讶。(对我来说,这个改变是清理我的代码,并使用
胶水
而不是
粘贴
:耸耸肩:)

w.r.t.第二个问题,你只能在“计划”中添加缺少的对象,使用
,globals=structure(TRUE,add=“a”)
众所周知,
未来
并不总是能很好地处理
数据。表
我喜欢这个问题,不幸的是还没有答案。我也看到过同样的事情。有时我的全球人出现,有时他们不。。。我对这个问题的答案很感兴趣。第二个问题,你可以在“计划”中只添加缺少的对象,使用
,globals=structure(TRUE,add=“a”)
,并且众所周知
未来的
并不总是能很好地处理
数据。table
我喜欢这个问题,不幸的是,现在还没有答案。我也看到过同样的事情。有时我的全球人出现,有时他们不。。。我对这个问题的答案很感兴趣。