Простой рабочий пример ddply() параллельно в Windows
Я искал пример простого рабочего примера использования ddply() параллельно. Я установил пакет "foreach", но когда я вызываю ddply (.parallel = TRUE), я получаю предупреждение о том, что "Нет зарегистрированной параллельной базы" )
Может ли кто-нибудь предоставить простой рабочий пример параллельного использования ddply?
Ответы
Ответ 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)