Comment créer un dictionnaire / table de hachage par itération à travers une colonne?
J'ai un bloc de données de deux colonnes: une clé et une valeur et je voudrais créer un dictionnaire à l'aide de la rangée respective de chaque colonne pour chaque élément du dictionnaire /table de hachage.
Autant je comprends la manière typique de l'utilisation de R dictionnaires /tables de hachage est en faisant quelque chose de semblable à cela.
labels.dic <- c("Id of the item and some other description" = "id")
Cela fonctionne parfaitement bien, mais lorsque j'essaie de le faire en utilisant les valeurs du bloc de données (nommé lbls dans l'exemple), il ne fonctionne pas. Pourquoi est-ce arrivé?
labels.dic <- c(lbls[1,1]=lbls[1,2])
Error: unexpected '=' in "c(lbls[1,1] ="
R ne fait pas dans les dictionnaires, vous essayez d'utiliser une langue où il n'est pas conçu pour être utilisé comme un menuisier vu essayer d'utiliser un tournevis pour creuser un trou dans le sol. Bien sûr, vous pouvez déformer les vous-même et travailler très dur pour faire quelque chose de similaire, mais les gens vont tout simplement à vous regarder drôle. R n'est pas conçu pour de tels types de itératif de manipulation de données.
Yep R structure de données est limité et c'est un grave problème refsmmat.com/posts/2016-09-12-r-lists.html python/julia est beaucoup plus agréable (et plus rapide!) pour travailler avec.
Yep R structure de données est limité et c'est un grave problème refsmmat.com/posts/2016-09-12-r-lists.html python/julia est beaucoup plus agréable (et plus rapide!) pour travailler avec.
OriginalL'auteur pedrosaurio | 2011-10-18
Vous devez vous connecter pour publier un commentaire.
Il me semble que vous avez eu de la désinformation. Je ne suis même pas certain de l'endroit où vous est venue l'idée de cette syntaxe pour la création d'une table de hachage.
Dans tous les cas: pour la table de hachage comme fonctionnalité, vous pouvez envisager d'utiliser un
environment
: ces travaux en interne avec une table de hachage (si je me souviens bien), donc faire tout ce que vous voulez.Vous pouvez utiliser ce quelque chose comme:
Donné votre
data.frame
, quelque chose comme ce serait le remplir:(note: ceci nécessite que la première colonne est une colonne de caractères, pas un facteur!!)
Vous pouvez facilement avoir une valeur nommée par l'aide de
someenv[["nameofinterest"]]
.OK, je vois ce que tu veux dire. J'ai été rebuté par vous à l'aide de seulement 1 paire clé/valeur dans votre exemple. Encore: les environnements sont censés avoir une meilleure performance à ce genre de chose. Si la performance n'est pas un problème, un nom de vecteur (comme @kohske suggéré) ou une liste fera l'amende juste.
Ouais, les environnements SONT beaucoup plus rapide que vous avez plusieurs de 1000 entrées.
new.env(hash=TRUE)
est nécessaire dans la R 2.12 et plus tôt (ils ont changé de hash=TRUE dans 2.13).OriginalL'auteur Nick Sabbe
La façon la plus simple est de changer
names
après la création de variables. Ainsi, vous pouvez définir une fonction comme ceci:L'a obtenu. Je pense que c'est difficile à trouver, bien que...
C'est pourquoi vous devriez lire
help(package = base)
ethelp(package = stats)
😉Quelle serait la différence entre un environnement à l'aide de la table de hachage paramètre et en utilisant le nom de la fonction?
OriginalL'auteur kohske
Une autre option qui est similaire à ce que vous avez vu avec Python ou Perl est le
hash
paquet. Voir: http://cran.r-project.org/web/packages/hash/Si vos clés sont particulièrement longue, alors je vous recommandons de conserver deux tables de hachage. Tout d'abord, de hachage de la clé, à l'aide de la
digest
emballer et entreposer un dictionnaire (table de hachage) que les cartes de digérer clé (cartographie de la clé à digérer est déjà fait par ledigest
paquet ;-)), puis à partir de l'empreinte de la valeur que vous souhaitez stocker. Cela fonctionne très bien pour moi.OriginalL'auteur Iterator