2012-05-04 19 views
1

Я читаю в XML-файле и хочу попробовать улучшить производительность с помощью foreach и doSNOW, однако при использовании plyr я столкнулся с ошибкой. Я думаю, это может быть потому, что я пропустил способ отправить функции и пакеты рабочим.Параллельный с использованием plyr

library(foreach) 
library(doSNOW) 
cl <- makeCluster(4) 
registerDoSNOW(makeCluster(4, type = "SOCK")) 

> getDoParWorkers() 
[1] 4 
> getDoParName() 
[1] "doSNOW" 
> getDoParVersion() 
[1] "1.0.5" 

namelist = list() 
out1 <- foreach(i = 1:xmlSize(root[[3]])) %dopar% { 
    namelist[[i]] <- llply(xmlToList(root[[3]][[i]][[2]]), 
         data.frame, .parallel = TRUE) 
} 

out2 <- t(as.vector(as.data.frame(namelist))) 

Генерирует ошибку:

Error in { : task 1 failed - "could not find function "llply"" 
+2

Было бы хорошо, если бы вы могли перепечатывать его в качестве самодостаточного, например, когда он работает. Что такое root, и для него, безусловно, требуется библиотека (XML). –

ответ

4

?foreach затем посмотреть на .packages аргумент

+1

+1. Кроме того, @ Sam35, ваша четвертая строка должна быть 'registerDoSNOW (cl)'. Кроме того, нет необходимости назначать 'namelist' (он все равно не будет работать). Вместо этого пусть результаты 'llply' переходят непосредственно к' out1', что они будут, если вы выберете 'namelist [[i]] <-'. – BenBarnes

+0

Спасибо, оба были очень полезны – Sam35

Смежные вопросы