Простой рабочий пример параллельного выполнения ddply () в Windows - PullRequest
22 голосов
/ 21 июля 2011

Я искал простой рабочий пример использования ddply () параллельно. Я установил пакет «foreach», но когда я вызываю ddply (.parallel = TRUE), я получаю предупреждение, что «Параллельный сервер не зарегистрирован»)

Может ли кто-нибудь привести простой рабочий пример использования ddply параллельно?

Ответы [ 4 ]

18 голосов
/ 24 января 2013

Вот простой рабочий пример:

> df <- data.frame(val=1:10, ind=c(rep(2, 5), rep(3, 5)))
> library(doSNOW)
> registerDoSNOW(makeCluster(2, type = "SOCK"))
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=FALSE)))
  ind V1
1   2 25
2   3 55
   user  system elapsed 
   0.00    0.00    4.01 
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=TRUE)))
  ind V1
1   2 25
2   3 55
   user  system elapsed 
   0.02    0.00    2.02 
6 голосов
/ 27 июля 2011

A.Я общался с Хэдли, и в ближайшее время нет планов исправить эту ошибку.Само исправление может быть предпринято кем угодно.Вот несколько советов, которые я получил от Хэдли:

«На самом простом уровне это относительно просто - вам просто нужно передать аргумент .export для foreach. В идеале plyr выяснит, что экспортировать автоматически, но всреднее время, изменение .parallel для получения списка аргументов для foreach (вместо просто T / F) было бы большим шагом. Начните с llply, и если вы можете заставить это работать, то довольно просто заставить работать все остальные функциитоже. "

B.Я настоятельно рекомендую Snow и DoSNOW, чтобы получить параллельный foreach для работы на Windows.Другие параллельные бэкэнды также: 1. не поддерживают Windows 2. не работают в 64-битной Windows 3. должны работать в Windows, но слишком глючные .Snow / doSNOW был единственным решением, которое работало "из коробки"

C.удачи!

6 голосов
/ 21 июля 2011

Вы зарегистрировали параллельный бэкэнд для foreach?

Возможно, вам придется прочитать об использовании foreach, прежде чем использовать его с plyr.

4 голосов
/ 14 ноября 2011

В средах Unix вы можете сделать это с помощью пакета doMC и его функции registerDoMC ()

> registerDoMC()
> example <- ddply(..., .parallel=TRUE)
...