Ich arbeite an einem R
script, das Daten (offensichtlich) laden muss. Das Laden der Daten erfordert viel Aufwand (500 MB), und ich frage mich, ob ich es vermeiden kann, jedes Mal, wenn ich das Skript neu starte, den Ladevorgang zu durchlaufen, was ich während der Entwicklung sehr oft mache.
Ich weiß zu schätzen, dass ich das Ganze in der interaktiven R
-Sitzung machen konnte, aber die Entwicklung von mehrzeiligen Funktionen ist bei der Eingabeaufforderung R
so viel weniger bequem.
Beispiel:
%Vor% Wie kann ich, wenn möglich, das Skript so ändern, dass bei späteren Ausführungen d
bereits verfügbar ist? Gibt es so etwas wie eine cache=T
Anweisung wie in R
Markdown Code Stücken?
Sortieren. Es gibt ein paar Antworten:
Verwenden Sie eine schnellere csv read: fread()
im Paket data.table()
wird von vielen geliebt. Deine Zeit kann auf ein oder zwei Sekunden sinken.
Lesen Sie auch einmal als csv und schreiben Sie dann in kompakter Binärform über saveRDS()
, damit Sie das nächste Mal readRDS()
ausführen können, was schneller ist, da Sie die Daten nicht erneut laden und parsen müssen.
Lesen Sie die Daten nicht, sondern mappen Sie sie über das Paket mmap
. Das ist komplizierter, aber wahrscheinlich sehr schnell. Datenbanken verwendet eine solche Technik intern.
Nach Bedarf laden, und zB ist das Paket SOAR
package hier nützlich.
Direkte Zwischenspeicherung ist jedoch nicht möglich.
Bearbeiten: Tatsächlich funktioniert das direkte Caching "sort of", wenn Sie Ihren Datensatz mit Ihrer R-Sitzung am Ende speichern. Viele von uns raten davon ab, dass als klar reproduzierbares Skript, das das Laden explizit macht, unsere Ansicht am besten ist - aber R kann über den load()
/ save()
-Mechanismus helfen (der mehrere Objekte auf einmal lost saveRSS() /
readRDS () arbeite an einem einzelnen Objekt.
Ich verwende exists
, um zu überprüfen, ob das Objekt vorhanden und bedingt geladen ist, d. h.
Wenn Sie die Datei erneut laden / verarbeiten wollen, verwenden Sie rm(d)
vor dem Sourcing. Seien Sie vorsichtig, dass Sie keine Objektnamen verwenden, die bereits an anderer Stelle verwendet werden. Andernfalls wird das Objekt ausgewählt und nicht geladen.