Options pour la mise en cache / memoization / hachage dans la R

Je suis en train d'essayer de trouver un moyen simple d'utiliser quelque chose comme Perl fonctions de hachage dans R (essentiellement la mise en cache), que j'avais l'intention de faire les deux Perl-style de hachage et d'écrire ma propre memoisation de calculs. Cependant, d'autres ont me battre pour le punch et avons des forfaits pour memoisation. Plus je creuse, plus je trouve, par exemple,memoise et R.cache, mais les différences ne sont pas facilement clair. En outre, il n'est pas clair comment on peut obtenir Perl-style de hachages (ou Python-style dictionnaires) et écrire son propre memoization, autres que l'utilisation de la hash paquet, qui ne semble pas sous-tendent les deux memoization paquets.

Depuis que je peux trouver aucune information sur CRAN ou d'ailleurs de distinguer entre les options, peut-être cela devrait être une communauté wiki question DONC: Quelles sont les options pour memoization et la mise en cache dans R, et quelles sont leurs différences?


Comme base de comparaison, voici une liste des options que j'ai trouvé. Aussi, il me semble que tout dépend de hachage, donc je vais noter le hachage et des options. Clé/valeur de stockage est liée en quelque sorte, mais ouvre une énorme boîte de pandore concernant systèmes DB (par exemple, BerkeleyDB, Redis, MemcacheDB et des dizaines d'autres).

On dirait les options sont les suivantes:

De hachage

  • digest - offre de hachage pour arbitraire des objets R.

Memoization

  • memoise - un outil très simple pour memoization de fonctions.
  • R. cache - offre plus de fonctionnalités pour memoization, mais il semble que certaines des fonctions de l'absence d'exemples.

La mise en cache

  • de hachage - Fournit des fonctionnalités de mise en cache semblable à Perl de hachages et les dictionnaires Python.

Clé/valeur de stockage

Ce sont des options de base pour le stockage externe de R objets.

Checkpoint

Autres

  • De la Base de R prend en charge: nom des vecteurs et des listes, en ligne et en colonne les noms des trames de données, et les noms d'objets dans les environnements. Il me semble que l'utilisation d'une liste est un peu de bidouille. (Il y a aussi pairlist, mais c'est déconseillé.)
  • La les données.table package prend en charge rapide des recherches d'éléments dans un tableau de données.

Cas d'utilisation

Même si je suis surtout intéressé à en connaître les options, j'ai deux types d'utilisation de base qui se posent:

  1. La mise en cache: un Simple comptage des chaînes de caractères. [Note: Ce n'est pas pour la PNL, mais en général les utiliser, de sorte que la PNL bibliothèques sont exagéré; les tables sont insuffisants, car je préfère ne pas attendre jusqu'à ce que l'ensemble des chaînes sont chargés en mémoire. Perl-style hachages sont au bon niveau d'utilité.]
  2. Memoization de monstrueux calculs.

Ces vraiment surviennent parce que je suis à creuser pour le profilage de certains slooooow code et je tiens vraiment à ne compter que de simples chaînes et voir si je peux accélérer certains calculs via memoization. Être en mesure de hachage les valeurs d'entrée, même si je n'ai pas memoize, permettez-moi de voir si memoization peut vous aider.


Note 1: Le CRAN Tâche de Vue sur Reproductible de Recherche listes d'un couple de paquets (cacher et R.cache), mais il n'y a pas d'élaboration sur les options d'utilisation.

Note 2: À l'aide d'autres personnes à la recherche de code, voici quelques notes sur certains des auteurs ou des paquets. Certains auteurs utilisent DONC. 🙂

  • Dirk Eddelbuettel: digest - beaucoup d'autres paquets dépendent de ce.
  • Roger Peng: cacher, filehash, stashR - elles s'adressent à différents problèmes de différentes façons; voir Roger du site pour plus de paquets.
  • Christopher Brown: hash - Semble être un bon paquet, mais les liens vers les ODG sont en baisse, malheureusement.
  • Henrik Bengtsson: R.cache & Hadley Wickham: memoise -- il n'est pas encore clair quand à préférer l'une sur l'autre.

Note 3: Certaines personnes utilisent des memoise/memoisation d'autres utilisent memoize/memoization. Juste une remarque, si vous êtes à la recherche autour de. Henrik utilise des "z" et Hadley utilise des "s".

  • Il serait sans doute bon d'ajouter un vrai cas d'utilisation ou deux de sorte que les méthodes peuvent être comparés...
  • Merci, je vais le faire!
  • Perplexe au sujet de vos commentaires re: les environnements. Si vous créez un nouvel environnement, il sera haché. ?environment par exemple, env.profile(new.env())$size # [1] 29
  • Vous êtes correct. Je ne le mentionne comme une option pour une capacité de hachage.
  • Ce post, par l'auteur de "R en un Mot' comprend des tests de vitesse de plusieurs options différentes pour la recherche d'objets, y compris les mettre dans un milieu (où de recherche utilise haché noms) broadcast.oreilly.com/2010/03/lookup-performance-in-r.html . Ne sais pas si c'est utile pour vous, mais je pensais que je serais le cloue à ce poste pour quelqu'un d'autre qui arrive.
  • cacher n'est plus disponible sur CRAN.

InformationsquelleAutor Iterator | 2011-08-31