Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:concetti_di_base:liste

Liste

Una lista è un elenco indicizzato di oggetti, che possono essere di tipi e classi diverse, e che possono includere anche altre liste. Ricordiamo che:

  • I dataframe sono liste di vettori (organizzate in righe e colonne, quindi oggetti misti);
  • Molti risultati di funzioni sono organizzati in forma di lista;
  • Alcuni argomenti delle funzioni vanno inseriti come liste.

Costruire una lista

Per costruire una lista usiamo la funzione list():

vettore1 <- c(1, 5, 8, 9, 3)
 
# creazione di una lista
lista <- list(vettore1, 5, "pippo")
lista
  ## [[1]]
  ## [1] 1 5 8 9 3
  ## 
  ## [[2]]
  ## [1] 5
  ## 
  ## [[3]]
  ## [1] "pippo"

Nomi degli elementi (names)

Gli elementi di una lista (come quelli di un vettore) possono avere un nome:

# creazione di una lista con nomi
altralista <- list("numeric" = 5, 
                   "char" = "pluto")
altralista
  ## $numeric
  ## [1] 5
  ## 
  ## $char
  ## [1] "pluto"

Come si vede, ciascun elemento è indicato dal nome preceduto dal simbolo $. Poiché i dataframe sono liste di vettori (variabili, in colonna), le variabili di un dataframe vengono indicate in questo modo.

Possiamo visualizzare, assegnare o modificare i nomi degli elementi con names():

names(altralista)
  ## [1] "numeric" "char"
names(lista)
  ## NULL
# assegnare i nomi agli elementi di una lista
names(lista) <- c("vettore", "numero", "stringa")
names(lista)
  ## [1] "vettore" "numero"  "stringa"
names(lista)[[2]]
  ## [1] "numero"
  
# attribuire / cambiare nome a un elemento della lista
names(lista)[[2]] <- "num"
names(lista)[[2]]
  ## [1] "num"

Nested lists

Una lista può far parte di un'altra lista. In questo caso, però, sarà altralista a far parte di lista ...

# nested list
lista$altralista <- altralista
lista
  ## $vettore
  ## [1] 1 5 8 9 3
  ## 
  ## $num
  ## [1] 5
  ## 
  ## $stringa
  ## [1] "pippo"
  ## 
  ## $altralista
  ## $altralista$numeric
  ## [1] 5
  ## 
  ## $altralista$char
  ## [1] "pluto"

Indicizzazione delle liste

Vedi: Indicizzazione

Gli oggetti inclusi in una lista, come quelli inclusi in un vettore, hanno un indice (sono indicizzati) in base alla posizione che occupano.

Indicando un elemento con le parentesi quadre semplici ([]), otteniamo come risultato un sottoinsieme della lista (subset):

lista[1]
  ## $vettore
  ## [1] 1 5 8 9 3

Si tratta ancora di una lista:

str(lista[1])
  ## List of 1
  ##  $ vettore: num [1:5] 1 5 8 9 3

Con le doppie parentesi quadre ([[]]), estraiamo i singoli valori che compongono il primo elemento della lista, ovvero il vettore numerico:

lista[[1]]
  ## [1] 1 5 8 9 3
str(lista[[1]])
  ##  num [1:5] 1 5 8 9 3

Per accedere a un sottoelemento della lista:

lista$vettore[2]
  ## [1] 5

In questo caso, la differenza fra [] e [[]] non risulta evidente:

class(lista$vettore[2])
  ## [1] "numeric"
class(lista$vettore[[2]])
  ## [1] "numeric"

In caso di liste nested, come altralista, e come molte di quelle incontrate in questo testo, ovviamente la differenza si ripete.

class(lista$altralista[2])
 ## [1] "list"
class(lista$altralista[[2]])

Infine, se hanno un nome, elementi e sottoelementi possono essere richiamati con quello:

lista$vettore
  ## [1] 1 5 8 9 3
lista$altralista$char
  ## [1] "pluto"

La notazione $ è equivalente a [[]]:

class(lista$altralista$char)
  ## [1] "character"

Script di esempio

Liste.R
vettore1 <- c(1, 5, 8, 9, 3)
 
# creazione di una lista
lista <- list(vettore1, 5, "pippo")
 
# creazione di una lista con nomi
altralista <- list("numeric" = 5, 
                   "char" = "pluto")
 
# assegnare i nomi agli elementi di una lista
names(lista) <- c("vettore", "numero", "stringa")
 
# attribuire / cambiare nome a un elemento della lista
names(lista)[[2]] <- "num"
 
# nested list
lista$altralista <- altralista

Domande? Scrivimi

su Telegram per email
r/concetti_di_base/liste.txt · Ultima modifica: 11/08/2025 14:37 da Agnese Vardanega