Параллельно для цикла R

Я вызываю функцию внутри цикла for.

sample_fun <- function(x,y) {
    # do something with x,y and return value
}

My loop looks like
result = list()

for(i in 1:10000)
   result[i] = sample_fun(i,i+1)

Как мне распараллелить этот цикл. Использование foreach и dopar дает мне ошибку индекса.


person thePoly_glot    schedule 27.11.2013    source источник


Ответы (1)


library(doSNOW)

sample_fun <- function(x,y) {
  # do something with x,y and return value
}

threads <- 8
N <- 10000

cl <- makeCluster(threads)
registerDoSNOW(cl)

result <- foreach(i=1:N) %dopar% sample_fun(i,i+1)

stopCluster(cl)

http://www.joyofdata.de/blog/parallel-computing-r-windows-using-dosnow-foreach/

person Raffael    schedule 27.11.2013
comment
Спасибо, радость. Сокращение времени пользователя на 10%. Вы можете предложить любые более агрессивные подходы. Я пытаюсь обрабатывать огромные графики с помощью пакета igraph - person thePoly_glot; 27.11.2013
comment
Посмотрите ссылку. Уловка состоит в том, чтобы правильно сбалансировать размер каждого обрабатываемого фрагмента, передаваемого потоку. С 8 ядрами я получаю улучшение до 450%. Также наблюдайте в диспетчере задач, что происходит с вновь созданными сеансами R - их использование ЦП и ОЗУ. - person Raffael; 27.11.2013