Quali sono le differenze tra i tipi di dati vettoriali e di elenco in R?

Quali sono le principali differenze tra i tipi di dati vettoriali e di lista in R? Quali sono i vantaggi o gli svantaggi dell’utilizzo (o meno) di questi due tipi di dati?

Gradirei vedere esempi che dimostrano i casi d’uso dei tipi di dati.

Tecnicamente le liste sono vettori, anche se pochissimi userebbero quel termine. “elenco” è una delle varie modalità, con gli altri come “logico”, “carattere”, “numerico”, “intero”. Ciò che chiamate i vettori sono “atomici” nella rigida parlata R:

aaa <- vector("list", 3) is.list(aaa) #TRUE is.vector(aaa) #TRUE 

Le liste sono di tipo "ricorsivo" mentre i vettori atomici non lo sono:

 is.recursive(aaa) # TRUE is.atomic(aaa) # FALSE 

Elaborate gli oggetti dati con funzioni diverse a seconda che siano ricorsivi, atomici o aventi attributi dimensionali (matrici e matrici). Tuttavia, non sono sicuro che una discussione sui "vantaggi e svantaggi" delle diverse strutture di dati sia una domanda sufficientemente focalizzata per SO. Per aggiungere a ciò che Tommy ha detto, oltre alle liste in grado di contenere un numero arbitrario di altri vettori, esiste la disponibilità di dataframes che sono un particolare tipo di lista che ha un attributo dimensionale che ne definisce la struttura. A differenza delle matrici e degli array che sono oggetti atomici realmente piegati, i dataframe possono contenere vari tipi, compresi i tipi di fattore.

Le liste sono “ricorsive”. Ciò significa che possono contenere valori di tipi diversi, anche altri elenchi:

 x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13)) x # print the list x$values # Get one element x[["ids"]] # Another way to get an element x$sub$foo # Get sub elements x[[c(3,2)]] # Another way (gets 13) str(x) # A "summary" of the list's content 

Gli elenchi vengono utilizzati in R per rappresentare insiemi di dati: la class data.frame è essenzialmente una lista in cui ogni elemento è una colonna di un tipo specifico.

Un altro uso è quando si rappresenta un modello: il risultato di lm restituisce una lista che contiene un gruppo di oggetti utili.

 d <- data.frame(a=11:13, b=21:23) is.list(d) # TRUE str(d) m <- lm(a ~ b, data=d) is.list(m) # TRUE str(m) 

I vettori atomici (non di tipo elenco, ma numerico, logico e carattere) sono utili poiché tutti gli elementi sono noti per avere lo stesso tipo. Questo rende la manipolazione molto veloce.

Come qualcuno che è appena entrato in R, ma viene da uno sfondo C / Java / Ruby / PHP / Python, ecco come ci penso.

Una list è in realtà un array + una hashmap. È un array associativo di PHP.

 > foo = list(bar='baz') > foo[1] 'baz' > foo$bar 'baz' > foo[['bar']] 'baz' 

Un vector è un array / elenco di tipo fisso. Pensala come una lista concatenata – perché mettere oggetti diversi in una lista concatenata è comunque un anti-modello. È un vettore nello stesso senso in cui le unità SIMD / MMX / vector usano la parola.

Questa e altre domande introduttive hanno risposta in http://www.burns-stat.com/pages/Tutor/hints_R_begin.html

È pensato per essere un’introduzione gentile che ti mette in grado di farlo al più presto. In una certa misura ha successo.

Vettori (matrice unidimensionale) : può contenere valori numerici, di carattere o logici. Tutti gli elementi di un vettore hanno lo stesso tipo di dati.

Una lista in R è simile alla tua lista di cose da fare al lavoro o a scuola: i diversi elementi in quella lista molto probabilmente differiscono per lunghezza, caratteristiche, tipo di attività che deve essere fatta, …

Un elenco in R consente di raccogliere una varietà di oggetti sotto un unico nome (ovvero il nome dell’elenco) in modo ordinato. Questi oggetti possono essere matrici, vettori, cornici di dati, anche altri elenchi, ecc. Non è nemmeno richiesto che questi oggetti siano in relazione tra loro in alcun modo.

Si potrebbe dire che una lista è un tipo di dati super: è ansible memorizzare praticamente qualsiasi informazione in essa contenuta!

Per build una lista si usa la funzione list (): mia_elenco <- lista (comp1, comp2 ...)

Gli argomenti della funzione elenco sono i componenti dell’elenco. Ricorda, questi componenti possono essere matrici, vettori, altre liste, …

Per riassumere, la principale differenza tra elenco e vettore è che l’ elenco in R consente di raccogliere una varietà di oggetti sotto un unico nome (cioè il nome della lista) in modo ordinato. Questi oggetti possono essere matrici, vettori, cornici di dati, persino altri elenchi, ecc. Non è nemmeno richiesto che questi oggetti siano correlati l’uno con l’altro in alcun modo … mentre gli elementi in un vettore hanno tutti lo stesso tipo di dati.

lista include più tipi di dati come carattere, numerico, logico et. ma il vettore contiene solo tipi di dati simili.

per esempio:

 scores <- c(20,30,40,50) student <- c("A","B","C","D") sc_log <- c(TRUE,FALSE,FALSE,TRUE) 

per lista:

 mylist <- list(scores,student,sc_log) # search for class of mylist vector #check structure of mylist using str() function. str(mylist) [1] list of 3 [1] $:num [1:4] 20 30 40 50 [2] $:chr [1:4] "A""B""C""D" [3] $:log [1:4] TRUE FALSE FALSE TRUE 

che significa lista contenente più tipi di dati come numerico, carattere e logica in mylist. Ma in vettoriale ci sarà un singolo tipo di dati di tutti gli elementi in quel vettore

per esempio:

per il vettore:

 vector1 <- c(1,2,3,4) Class(vector1) [1] "Numeric" #which means all elements of vector containing single data type that is numeric only.