Hallo Anti,
Anti hat geschrieben: ↑Fr Nov 16, 2018 9:22 am
jogo hat geschrieben: ↑Do Nov 15, 2018 3:26 pmStimmt es, dass pro Parameterkombination der gesamte Dataframe
runlist (mit seinen 26 Mio Zeilen) jeweils in eine CSV-Datei geschrieben werden soll?
Wie groß ist eine solche Datei? (ups, das war schon die zweite Frage)
Ja, das stimmt, da ich für den besten Lauf die gesamte Historie haben wollte, um daraus auch tatsächliche Migrationsraten und die Mikroevolution berechnen wollte. Natürlich wäre es eleganter zunächst nur das Qualitätsmerkmal der Runs aufzunehmen und im Nachhinein für den besten Run die runlist zu schreiben. Wird das Ergebnis ja dennoch stark zufallsbeeinflußt sein (siehe die ganzen sample-Funktionen).
hm, und wie groß ist eine solche Datei?
Gleich daneben steht in Deinem Code, dass auch die Datei
runsummary.csv bei jedem Schleifendurchlauf überschrieben wird.
Ist das so gewollt (das Überschreiben)?
Aber hast Du irgendeine Idee, wie ich das Ganze schneller laufen lassen kann? Das macht mich echt fertig (schlafe schon seit einigen Tagen schlecht deswegen).
Für den Test des Codes habe ich erstmal die 26 Mio auf 2 Mio abgeändert ...
Die Mittelwertbildung kann aggregate() erledigen o.ä. (z.B. tapply())
Ansonsten werden ähnliche Maßnahmen wie der Einsatz von aggregate() an anderen Stellen dadurch verhindert, dass der ganze Code nicht vektororientiert geschrieben wurde. - Also eigentlich kommst Du viel zu spät mit Deinem Anliegen, durch Umstrukturierung des Quelltextes die Laufzeit zu verkürzen.
Ein weiterer Hinderungsgrund ist, dass der Code bisher nicht fehlerfrei läuft. Eine Laufzeitverkürzung kann man nur dann vernünftig angehen, wenn die Laufzeit bekannt ist. Bisher kommt der Code ja nichtmal bis zum Schreiben der CSV-Dateien.
Einige meiner Vorschläge hast Du nicht berücksichtigt. Deshalb bin ich jetzt vorsichtiger mit konkreten Code-Vorschlägen; da experimentiere ich lieber erstmal alleine. Insgesamt bleibt aber zu bedenken, dass die Operationen auf einer derartigen Masse von Daten einfach eine gewisse Zeit kosten und die Frage ist ganz einfach, welcher Faktor der Beschleunigung der Laufzeit überhaupt Deiner Meinung nach erzielt werden muss, damit das Ergebnis für Dich annehmbar ist? Hast Du dazu eine Schätzung?
Bezüglich der Parameterkombinationen denke ich sogar darüber nach, den Code etwas zu verlangsamen im Sinne von:
Code: Alles auswählen
myfu <- function(Time, demand) message(sprintf("Ti: %10.2e und dem: %e", Time, demand))
for (i in 1:nrow(BOD)) do.call(myfu, BOD[i, ])
Gruß, Jörg