Подтвердить что ты не робот

Простой рабочий пример ddply() параллельно в Windows

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

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

4b9b3361

Ответ 1

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

> 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 

Ответ 2

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

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

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

С. удачи!

Ответ 3

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

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

Ответ 4

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

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