Что такое "черная магия" Фуррра?
Я использую пакет R furrr
для большинства моих потребностей в распараллеливании и практически никогда не возникало проблем с экспортом вещей из моей глобальной среды в кластер. Сегодня я это сделал и не знаю почему. Документация пакета, кажется, описывает процесс, посредством которого глобальные переменные отправляются в кластеры, как "черную магию". Что такое черная магия?
В furrr::future_options
в документации говорится:
Глобальные переменные и пакеты По умолчанию будущий пакет будет выполнять черную магию для поиска глобальных переменных и пакетов, которые требуются вашему вызову furrr, и будет экспортировать их каждому исполнителю. Однако он не всегда идеален и может быть уточнен с помощью аргументов глобальных переменных и пакетов.
В качестве второстепенного вопроса: есть ли элегантный способ сказать ему, что он занимается черной магией, но также экспортировать то, что он пропустил? Или есть варианты: а) вся черная магия или б) жестко закодировать все в.options
аргумент?
1 ответ
Это не полностью отвечает на вопрос, но я думаю, что это указывает вам правильное направление. Из раздела «Глобалы» этой вступительной виньетки :
Это делается с помощью пакета globals , который использует проверку статического кода для определения глобальных переменных. Если глобальная переменная идентифицирована, она фиксируется и становится доступной для процесса оценки.
Также есть виньетка «Общие проблемы с решениями» (которую @michael любезно связала выше), в которой обсуждаются некоторые общие проблемы, возникающие в результате статического кода eval в пакете globals.
Я нашел свой путь сюда, потому что мой
Трудно сказать, почему ваш код иногда работал, а иногда нет. Но, как видите, под капотом творится достаточно сложностей, и я не удивлюсь, если какое-то, казалось бы, несвязанное изменение что-то сломало. (Для меня это изменение заключалось в очистке моего кода и использовании