Menu
Coddy logo textTech

Accedere agli elementi di una lista

Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 72 di 78.

Le liste usano una sintassi diversa per accedere agli elementi rispetto ai vettori. La differenza fondamentale è tra parentesi singole [ ] e parentesi doppie [[ ]].

Le doppie parentesi estraggono l’elemento effettivo dalla lista:

my_list <- list(42, "hello", TRUE)
print(my_list[[1]])

Output:

[1] 42

Le parentesi singole restituiscono una sottolista contenente l'elemento, non l'elemento stesso:

my_list <- list(42, "hello", TRUE)
print(my_list[1])

Output:

[[1]]
[1] 42

Questa distinzione è importante quando vuoi lavorare con il valore effettivo. Se un elemento di una lista è un vettore, le doppie parentesi ti consentono di accedervi direttamente e poi di usare l’indicizzazione dei vettori:

my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2])

Output:

[1] 20

Qui, my_list[[1]] recupera il vettore e [2] accede al suo secondo elemento. Ricorda: usa [[ ]] quando ti serve il contenuto effettivo e [ ] quando vuoi una lista più piccola.

challenge icon

Sfida

Facile

Riceverai due righe di input:

  1. Tre valori separati da virgole di tipi diversi (ad es., 100,hello,TRUE)
  2. Un elenco di numeri separati da virgole che rappresentano un vettore da memorizzare come quarto elemento (ad es., 5,10,15,20)

Esegui le seguenti operazioni:

  1. Crea una lista con quattro elementi: il valore numerico, il testo, il valore logico e il vettore di numeri
  2. Usa le doppie parentesi quadre per estrarre e stampare il secondo elemento (il valore testuale)
  3. Usa le parentesi quadre singole per estrarre il terzo elemento e stampare il risultato (nota la differenza nel formato dell'output)
  4. Accedi al vettore memorizzato nel quarto elemento usando le doppie parentesi quadre, quindi estrai e stampa il suo terzo valore usando l'indicizzazione del vettore
  5. Stampa la somma di tutti i numeri nel quarto elemento (accedi al vettore con le doppie parentesi quadre e usa sum())

Ad esempio, se gli input sono:

42,world,FALSE
8,16,24,32,40

L'output dovrebbe essere:

[1] "world"
[[1]]
[1] FALSE

[1] 24
[1] 120

Spiegazione:

  • my_list[[2]] estrae il valore testuale effettivo: "world"
  • my_list[3] restituisce una sottolista contenente FALSE (nota il [[1]] nell'output)
  • my_list[[4]][3] accede al vettore, quindi recupera il suo terzo elemento: 24
  • sum(my_list[[4]]) calcola 8+16+24+32+40 = 120

Provalo tu

# Leggi l'input
con <- file("stdin", "r")
input1 <- suppressWarnings(readLines(con, n = 1))  # Prima riga: tre valori separati da virgole
input2 <- suppressWarnings(readLines(con, n = 1))  # Seconda riga: numeri separati da virgole per il vettore
close(con)

# Suddividi la prima riga di input in valori separati
values <- strsplit(input1, ",")[[1]]
numeric_val <- as.numeric(values[1])
text_val <- values[2]
logical_val <- as.logical(values[3])

# Converti la seconda riga di input in un vettore numerico
vector_val <- as.numeric(strsplit(input2, ",")[[1]])

# TODO: Scrivi il tuo codice qui sotto
# 1. Crea una lista con quattro elementi: numeric_val, text_val, logical_val e vector_val
# 2. Usa le doppie parentesi quadre [[ ]] per estrarre e stampare il secondo elemento
# 3. Usa le parentesi quadre singole [ ] per estrarre il terzo elemento e stamparlo
# 4. Accedi al quarto elemento con le doppie parentesi quadre, poi estrai il suo terzo valore
# 5. Stampa la somma di tutti i numeri nel quarto elemento
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore R online