Hallo Jessi,
jessi hat geschrieben: ↑So Jul 23, 2017 12:11 pm
ich habe vielleicht eine etwas komische Frage, bin aber leider in Google bzw. diversen Skripten nicht recht viel schlauer geworden. Ich habe wirklich sehr sehr viele Messdaten. Diese einzulesen dauert nun sehr lange bzw. kommt als R-Meldung
Error: cannot allocate vector of size xxx Mb. Gibt es eine Lösung, die Messdaten ev. "schneller" einzulesen bzw. meinen memory.size zu erhöhen um überhaupt mit den vielen Messdaten Auswertungen zu machen?
Hier wird dieses Problem breit diskutiert:
https://stackoverflow.com/questions/517 ... -size-n-mb
Eine Kurzversion, die die möglichen Lösungen beschreibt ist:
Mein bisheriger Code:
Code: Alles auswählen
library(RSQLite)
m <- dbDriver("SQLite")
con <- dbConnect(m, dbname = "messdaten"')
alltables <- dbListTables(con)
alltables
# bei dieser Zeile kommt dann nach einiger Zeit die oben beschriebene Fehlermeldung
daten <- dbGetQuery(con, 'SELECT datum a r e v FROM data_wind')
Ich hab mal gelesen, dass man Matrizen (mit Null befüllt) vorher schon definierten sollte, da dies den Einleseprozess beschleunigen soll. Die Matrix mit den Messdaten würde ich wie folgt definieren:
Diese Lösung ("preallocation of a matrix/vector") trifft für Dich nicht zu.
preallocation ist immer dann hilfreich, wenn ansonsten ein Vektor (bzw. eine Matrix) Stück für Stück aufgebaut (und dabei ständig vergrößert) wird. In Deinem Fall bekommst Du durch die Datenbankabfrage einen kompletten Dataframe.
Neben allem, was schon geschrieben wurde, könnte es noch die Möglichkeit geben, möglichst viel Arbeit schon auf der Seite der Datenbank zu erledigen:
a) also entweder direkt in SQLite oder
b) in einer anderen Datenbank (dafür müssen die Daten natürlich erst migriert werden).
Dort müsste mindestens eine Stufe der Aggregation der Daten erfolgen, um die Datenmenge zu reduzieren.
Folgende Fragen nebenbei:
Wieviel RAM hat Dein Computer?
Welches Betriebssystem verwendest Du? (insbesondere 32-bit oder 64-bit?)
Welche Version von R verwendest Du? (auch hier wieder: insbesondere 32-bit oder 64-bit?)
Gruß, Jörg