mclapply vs for-Schleifen zum Plotten: Fokus auf Geschwindigkeit und Skalierbarkeit

Ich führe eine Funktion in R aus, deren Ausführung lange dauern kann, da mehrere Befehle ausgeführt werden, um einige Daten zu transformieren und zu unterteilen, bevor sie in R verschoben werdenggplot zu planen. Ich muss diese Funktion mehrmals ausführen, um die Argumentwerte anzupassen. Das Beispiel, das ich zur Verfügung stellen werde, ist einfach. Aber haben Sie sich gefragt, wie Sie es beschleunigen können? wenn vergrößert, d. h., was ist der schnellste Weg, um jede einzelne Kombination zu erhalten ... gibt es eine generische Konvertierungsmethodefor schleift inmclapply vorausgesetzt, sie sind schneller ... Sie können gerne alternative Musterbeispiele bereitstellen, die die Bevorzugung einer bestimmten Methode belegen

Musterbeispiel:

die Grundfunktion:

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))
}

Die einfachste Art, Parameter durchzugehen, wäre also, Folgendes zu tun ...

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

Was wäre der schnellste Weg, dies zu beschleunigen? Ich nehme an, es könnte so etwas brauchenexpand.grid(x=c(1:10),y=c(1:2),z=seq(100,500,by=100)) und die Verwendungmclapply durch jede Reihe laufen ... auf eine Art parallele Weise? (Ich habe 4 Kerne dafür zur Verfügung). Bitte zögern Sie nicht, Bits aus der Grundfunktion herauszuziehen oder Dinge in die Grundfunktion gemäß den Methoden einzufügen, die die größte Geschwindigkeitsverbesserung bewirken würden. Der Vorgang wird natürlich länger dauern, wenn Sie den Bereich für jeden Parameter vergrößern, aber kann nichts dagegen unternommen werden ... oder kann das auch irgendwie geändert werden, wenn es auf mehrere Kerne aufgeteilt wird oder so?

und für Bonuspunkte ... gibt es irgendetwas, das die Ausgabebilder speichert und Schieberegler wie im Paket erstelltmanipulate Alle Parameter auf interaktive Weise durchgehen ... Alles, was es tut, ist, das relevante Bild herauszuholen, anstatt es jedes Mal neu zu berechnen.

N.B. Bitte zögern Sie nicht, andere Pakete zu verwenden / vorzuschlagen (wieforeach), die Ihrer Meinung nach für Ihre Lösung nützlich sein könnten

Antworten auf die Frage(2)

Ihre Antwort auf die Frage