2013-01-03 9 views
7

Ho recentemente iniziato a imparare la lingua R. Vengo dallo sfondo Java/Python. Una cosa che ho trovato sorprendente è che associative array in R è chiamato List e non è qualcosa come Map o .Perché array associativo di R è chiamato elenco e non mappa/dizionario

Penso che nomi come Map e Dictionary trasmettano meglio l'idea che la struttura dati sia un array associativo che un elenco. Per favore, fammi sapere qual è lo sfondo/ragionamento dietro a questo.

+2

Questo tipo di domanda non si adatta bene allo stile Q & A tecnico di StackOverflow. Non si tratta di un problema pratico che stai affrontando ed è probabile che venga chiuso. Troverai un pubblico più adatto per questo tipo di domande su programmers.stackexchange.com –

risposta

11

S ha una cronologia più lunga di Java o Python. La terminologia deriva da LisP uno dei primi linguaggi di alto livello.

Inoltre, è possibile creare quello che alcuni potrebbero chiamare un array associativo utilizzando un vettore chiamato atomica:

vec <- c(a=1,b=2,c=3) 
vec["b"] 
#b 
#2 

Ci sono due specie di vettori: "ricorsivo" e "atomica". Le liste sono del primo tipo. Entrambi possono essere indicizzati con "nome" se ci sono chiavi assegnate agli elementi. Tuttavia, il termine "nome" in R si riferisce strettamente ai simboli che esistono in un ambiente che ha valori oggetto. Vedi ?as.name. In R "nomi" o "simboli" sono oggetti linguaggio che nel codice non sono quotati, mentre i valori di carattere sono usati per assegnare o estrarre valore da oggetti dati per chiavi.

+1

+1 per LisP! come programmazione 'Lista'! – agstudy

+1

Ma quello che Lisp chiama una lista è in realtà una lista (una lista concatenata, per essere precisi). Le varianti Lisp che offrono anche contenitori associativi non li chiamano liste (perché non lo sono). – delnan

+2

Stai riducendo il mio punto (e illustrando perché questa domanda è stata chiusa). S era in giro prima che una delle due lingue citate avesse una terminologia migliore. Non è così difficile usare elenchi S/R con le funzioni auto e cdr. 'LL <- lista (1,2,3); car <- function (x) {x [[1]]}; cdr <- function (x) {x [-1]} ' –

4

Una "mappa" è una mappa del mondo. Per trovare le cose su una mappa devi eseguire la scansione in due dimensioni. Questo è O (n^2). Un "dizionario" è un libro di parole in ordine alfabetico. Per trovare una parola in un dizionario devi fare una ricerca binaria. Questa è O (log n) performance.

Quindi nessuna di quelle parole, per me, ritrarre con precisione la struttura né le prestazioni di un array associativo ...

Matematicamente parlando un array associativo è semplicemente una funzione in un intervallo discreto. Quindi dovrebbero essere chiamate funzioni. Le parentesi quadrate doppie sono solo un fastidio sintattico. Perché non possiamo fare:

z = list() 
z("foo") = c(1,2,3) 
print(z("foo")) # prints 1 2 3 
print(z("bar")) # errors 
  • perché R non è così.
+1

" map "o" mapping "è talvolta usato come sinonimo di" function " – Kos

+3

... perché i matematici non hanno già abbastanza parole per confonderci con . – Spacedman

Problemi correlati