2012-05-21 14 views
48

Voglio fare l'equivalente di un dict pitone in R. In sostanza, in python ho:equivalente di un dict pitone in R

visited = {} 

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

L'idea è, se ho visto che specifica, atom_count, ho ho visitato [atom_count] = 1. Quindi, se vedo di nuovo quel numero atom_count, non lo faccio "Do Stuff". Atom_Count è un numero intero.

Grazie!

+0

'ifelse' e'% in% '? – Chase

+4

Vedere il pacchetto R 'hash' con le sue funzioni di accesso quasi simili a Python. –

risposta

45

La cosa più simile a un dittato python in R è semplicemente una lista. Come la maggior parte dei tipi di dati R, le liste possono avere nomi di attributi che possono permettere liste di agire come un set di coppie nome-valore:

> 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" 

Ora, per il solito disclaimer: non sono esattamente lo stesso; ci saranno differenze. Quindi inviterà delusioni a provare a usare letteralmente le liste esattamente come potresti usare un dict in python.

+0

come si può iterare in modo programmatico attraverso tale elenco? l'ingenuo 'l $ names (l) [1]' ovviamente fallisce. Anche io non sono stato in grado di ottenere 'l [che()]' di lavorare –

+0

@MikePalmice parte un 'ciclo for', che è una specie di un'opzione in quasi tutte le lingue in giro, c'è' lapply'. Ci sono anche cose correlate con differenti sintassi, come 'Map', e un intero pacchetto, ** purrr ** per molte cose di programmazione funzionale. – joran

5

Credo che l'uso di una tabella hash (creazione di un nuovo ambiente) possa essere la soluzione al tuo problema. Scriverò come farlo, ma l'ho fatto ieri giorno su talkstats.com.

Se il tuo dizionario è grande e solo due colonne, questa potrebbe essere la strada da percorrere. Ecco il link al thread talkstats con codice di esempio R:

HASH TABLE LINK

+0

Nota 'data.table' e le proprie ricerche vettoriali denominate R sono migliorate drasticamente in velocità da questo momento. –

Problemi correlati