Ich versuche, einen einfachen Weg zu finden, um so etwas wie Perls Hash-Funktionen in R zu verwenden (im Wesentlichen Caching), da ich sowohl Hashing im Perl-Stil als auch meine eigene Memoisierung von Berechnungen schreiben wollte. Andere haben mich jedoch bis zum Anschlag geschlagen und haben Pakete zum Auswendiglernen. Je mehr ich grabe, desto mehr finde ich zB memoise
und R.cache
, aber Unterschiede sind nicht ohne weiteres klar. Außerdem ist nicht klar, wie man sonst Hashes im Perl-Stil (oder Wörterbücher im Python-Stil) erhalten und eigene Memoisierungen schreiben kann, außer das hash
Paket zu verwenden, das die beiden Memoisierungspakete nicht zu untermauern scheint.
Da ich keine Informationen zu CRAN oder anderswo finden kann, um zwischen den Optionen zu unterscheiden, sollte dies möglicherweise eine Community-Wiki-Frage zu SO sein: Welche Optionen gibt es für das Speichern und Zwischenspeichern in R und welche Unterschiede gibt es?
Als Vergleichsbasis finden Sie hier eine Liste der Optionen, die ich gefunden habe. Außerdem scheint es mir, dass alle vom Hashing abhängen, daher werde ich auch die Hashing-Optionen beachten. Die Schlüssel- / Wertspeicherung ist etwas verwandt, eröffnet jedoch eine große Anzahl von Würmern in Bezug auf DB-Systeme (z. B. BerkeleyDB, Redis, MemcacheDB und viele andere ).
Es sieht so aus, als wären die Optionen:
Hashing
- Digest - Bietet Hashing für beliebige R-Objekte.
Auswendiglernen
- memoise - ein sehr einfaches Werkzeug zum Speichern von Funktionen.
- R.cache - bietet mehr Funktionen zum Auswendiglernen, obwohl einigen Funktionen anscheinend Beispiele fehlen.
Caching
- Hash - Bietet Caching-Funktionen, die Perls Hashes und Python-Wörterbüchern ähneln.
Schlüssel- / Wertspeicherung
Dies sind grundlegende Optionen für die externe Speicherung von R-Objekten.
Checkpointing
- Cacher - dies scheint eher dem Checkpointing zu ähneln .
- CodeDepends - Ein OmegaHat-Projekt,
cacher
das einige nützliche Funktionen unterstützt. - DMTCP (kein R-Paket) - scheint Checkpointing in einer Reihe von Sprachen zu unterstützen, und ein Entwickler hat kürzlich um Unterstützung beim Testen von DMTCP-Checkpointing in R gebeten .
Andere
- Base R unterstützt: benannte Vektoren und Listen, Zeilen- und Spaltennamen von Datenrahmen und Namen von Elementen in Umgebungen. Es scheint mir, dass die Verwendung einer Liste ein bisschen kludge ist. (Es gibt auch
pairlist
, aber es ist veraltet .) - Das Paket data.table unterstützt die schnelle Suche nach Elementen in einer Datentabelle.
Anwendungsfall
Obwohl ich hauptsächlich daran interessiert bin, die Optionen zu kennen, ergeben sich zwei grundlegende Anwendungsfälle:
- Caching: Einfaches Zählen von Strings. [Hinweis: Dies ist nicht für NLP, sondern für den allgemeinen Gebrauch, daher sind NLP-Bibliotheken übertrieben. Tabellen sind unzureichend, weil ich lieber nicht warten möchte, bis der gesamte Satz von Zeichenfolgen in den Speicher geladen ist. Perl-artige Hashes sind auf dem richtigen Nutzen.]
- Auswendiglernen monströser Berechnungen.
Diese entstehen wirklich, weil ich mich mit der Profilerstellung von Sloooooow-Code beschäftige und wirklich nur einfache Zeichenfolgen zählen möchte, um zu sehen, ob ich einige Berechnungen durch Memoisierung beschleunigen kann. Wenn ich in der Lage bin, die Eingabewerte zu hashen, auch wenn ich mich nicht merke, kann ich sehen, ob das Speichern hilfreich ist.
Hinweis 1: In der CRAN-Aufgabenansicht für reproduzierbare Forschung sind einige der Pakete ( cacher
und R.cache
) aufgeführt, die Verwendungsoptionen werden jedoch nicht näher erläutert.
Hinweis 2: Um anderen bei der Suche nach verwandtem Code zu helfen, finden Sie hier einige Hinweise zu einigen Autoren oder Paketen. Einige der Autoren verwenden SO. :) :)
- Dirk Eddelbuettel:
digest
- Viele andere Pakete hängen davon ab. - Roger Peng:
cacher
,filehash
,stashR
- diese Adresse unterschiedliche Probleme auf unterschiedliche Weise; Weitere Pakete finden Sie auf Rogers Website . - Christopher Brown:
hash
- Scheint ein nützliches Paket zu sein, aber die Links zu ODG sind leider nicht verfügbar. - Henrik Bengtsson:
R.cache
& Hadley Wickham:memoise
- Es ist noch nicht klar, wann ein Paket dem anderen vorzuziehen ist.
Hinweis 3: Einige Personen verwenden Memoise / Memoization, andere verwenden Memoize / Memoization. Nur eine Notiz, wenn Sie herum suchen. Henrik benutzt "z" und Hadley benutzt "s".