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