mclapply против циклов для построения графиков: фокус на скорости и масштабируемости

Я запускаю функцию в R, выполнение которой может занять много времени, поскольку она выполняет несколько команд для преобразования и подмножества некоторых данных, прежде чем они помещают их вggplot построить. Мне нужно запустить эту функцию несколько раз, регулируя значения аргументов. Пример, который я приведу, прост ... но было интересно, как его ускорить? если увеличить, то есть какой самый быстрый способ получить каждую комбинацию ... есть ли общий метод преобразованияfor петли вmclapply предполагая, что они быстрее ... пожалуйста, не стесняйтесь приводить альтернативные примеры, которые демонстрируют предпочтение для конкретного метода

mock example:

основная функция:

ff <- function(n, mu, stdev){
     x1 <- c(1:n)
     y1 <- rnorm(n,mu,stdev)
     z1 <- data.frame(cbind(x1,y1))
     ggplot(z1, aes(x=x1,y=y1))+
       geom_point()+
       labs(title=paste("n=",n,"mu=",mu, "stdev=",stdev))
}

поэтому лучший способ прохождения параметров заключается в следующем:

for(i in 1:10){
    for(j in 1:2){
       for(k in seq(100,500,by=100)){
         ff(k,i,j)
       }
    }
}

Какой самый быстрый способ ускорить это? Я предполагаю, что может понадобиться что-то вродеexpand.grid(x=c(1:10),y=c(1:2),z=seq(100,500,by=100)) и использованиеmclapply пробежаться по каждой строке ... каким-то параллельным образом? (У меня есть 4 ядра для этого). Пожалуйста, не стесняйтесь вытаскивать биты из базовой функции или помещать вещи в базовую функцию в соответствии с методами, которые позволят добиться наибольшего улучшения скорости. Очевидно, что этот процесс займет больше времени, если вы увеличите диапазон для каждого параметра, но с этим ничего нельзя поделать ... или это тоже можно как-то изменить, если разделить на несколько ядер или что-то в этом роде ...?

и для бонусных баллов ... есть ли что-нибудь, что сохранит выходные изображения и создаст слайдеры, как в пакетеmanipulate чтобы просмотреть все параметры в интерактивном режиме ... все, что он делает, это вытягивает соответствующее изображение, а не пересчитывает его каждый раз.

Нотабене Пожалуйста, не стесняйтесь использовать / предлагать любые другие пакеты (например,foreach) что вы думаете, может быть полезно для вашего решения

Ответы на вопрос(2)

Ваш ответ на вопрос