101 votes

équivalent d'un dict python en R

Je veux faire l'équivalent d'un dict en python dans R. En gros, dans python, j'ai :

visited = {}

if atom_count not in visited:
  Do stuff
  visited[atom_count] = 1

L'idée est que, si je vois ce spécifique, atom_count, j'ai visited[atom_count] = 1 . Ainsi, si je vois à nouveau ce nombre d'atomes, alors je ne "fais pas de choses". Atom_Count est un nombre entier.

Merci !

95voto

joran Points 68079

La chose la plus proche d'un dict python dans R est tout simplement une liste. Comme la plupart des types de données R, les listes peuvent avoir un attribut names qui permet aux listes de se comporter comme un ensemble de paires nom-valeur :

> l <- list(a = 1,b = "foo",c = 1:5)
> l
$a
[1] 1

$b
[1] "foo"

$c
[1] 1 2 3 4 5

> l[['c']]
[1] 1 2 3 4 5
> l[['b']]
[1] "foo"

Maintenant, l'avertissement habituel : ils ne sont pas exactement les mêmes ; il y aura des différences. Vous serez donc déçu d'essayer d'utiliser littéralement les listes exactement comme vous pourriez utiliser un dict en python.

11voto

user2739472 Points 1111

Si, comme dans votre cas, vous voulez simplement que votre "dictionnaire" stocke des valeurs du même type, vous pouvez simplement utiliser un vecteur, et nommer chaque élément.

> l <- c(a = 1, b = 7, f = 2)
> l
a b f 
1 7 2

Si vous voulez accéder aux "clés", utilisez names .

> names(l)
[1] "a" "b" "f"

5voto

Tyler Rinker Points 27607

Je pense que l'utilisation d'une table de hachage (création d'un nouvel environnement) peut être la solution à votre problème. Je taperais bien comment faire mais je l'ai fait hier sur talkstats.com.

Si votre dictionnaire est volumineux et ne comporte que deux colonnes, c'est peut-être la solution. Voici le lien vers le fil de discussion de talkstats avec un exemple de code R :

LIEN VERS LA TABLE DE HACHAGE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X