Есть ли другой способ загрузки дополнительных пакетов в рабочих (параллельные вычисления)? - PullRequest
2 голосов
/ 02 ноября 2010

Одним из способов распараллеливания в R является пакет snowfall .Для отправки пользовательских функций работникам вы можете использовать sfExport() (см. Сообщение Джориса здесь ).

У меня есть пользовательская функция, которая зависит от функций из не базовых пакетов, которые не загруженыавтомагически.Таким образом, когда я выполняю свою функцию параллельно, R отключается, потому что некоторые функции недоступны (подумайте о пакетах spatstat, splancs, sp ...).До сих пор я решил эту проблему, вызвав библиотеку () в своей пользовательской функции.Это загружает пакеты при первом запуске и, возможно, просто игнорирует последующие итерации.Тем не менее, мне было интересно, есть ли другой способ сказать каждому работнику загрузить пакет на первой итерации и покончить с ним (или я что-то упускаю, и каждая итерация начинается как tabula rasa?).

Ответы [ 2 ]

4 голосов
/ 02 ноября 2010

Я не понимаю вопроса.

Пакеты загружаются через library(), и большинство функций параллельного выполнения поддерживают это.Например, пакет snow использует

clusterEvalQ(cl, library(boot))

для «тихого» (т. Е. Не возвращаемого значения) вычисления данного выражения --- здесь вызов library() --- onкаждый узел.В большинстве сред параллельного выполнения есть что-то подобное.

Зачем вам опять что-то другое, и что именно здесь не работает?

1 голос
/ 03 ноября 2010

Для снегопада есть специальная команда, sfLibrary(). Смотрите также «снегопад-инструменты». Вызывать библиотеку вручную на каждом узле настоятельно не рекомендуется. sfLibrary - это, по сути, оболочка для решения, которое Дирк дал на основе пакета со снегом.

...