Modificare le liste
Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 73 di 78.
Ora che sai come creare liste e accedere ai loro elementi, impariamo a modificarle. Puoi cambiare gli elementi esistenti, aggiungerne di nuovi o rimuovere del tutto gli elementi.
Per modificare un elemento esistente, usa le doppie parentesi quadre con un'assegnazione:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Output:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEPer aggiungere un nuovo elemento, assegnagli semplicemente un indice che non esiste ancora:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Output:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEPer rimuovere un elemento, assegnagli NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Output:
[[1]]
[1] 10
[[2]]
[1] TRUENota che, dopo aver rimosso il secondo elemento, gli elementi rimanenti si spostano per colmare il vuoto. L'elemento che si trovava in posizione 3 ora è in posizione 2.
Sfida
FacileRiceverai tre righe di input:
- Tre valori separati da virgole per inizializzare una lista (ad es.,
50,hello,TRUE) - Un indice e un nuovo valore separati da una virgola per la modifica (ad es.,
2,goodbye) - L’indice dell’elemento da rimuovere (ad es.,
3)
Esegui le seguenti operazioni:
- Crea una lista con i tre valori iniziali (convertendoli nei tipi appropriati: numerico, carattere, logico)
- Stampa la lista originale
- Modifica l’elemento all’indice specificato con il nuovo valore (mantienilo come stringa di caratteri)
- Stampa la lista dopo la modifica
- Aggiungi alla lista un quarto elemento con il valore
999 - Stampa la lista dopo aver aggiunto il nuovo elemento
- Rimuovi l’elemento all’indice specificato (dal terzo input)
- Stampa la lista finale
Ad esempio, se gli input sono:
100,world,FALSE
1,updated
2L’output dovrebbe essere:
[[1]]
[1] 100
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[4]]
[1] 999
[[1]]
[1] "updated"
[[2]]
[1] FALSE
[[3]]
[1] 999Spiegazione:
- Lista originale: 100, "world", FALSE
- Dopo aver modificato l’indice 1: "updated", "world", FALSE
- Dopo aver aggiunto il quarto elemento: "updated", "world", FALSE, 999
- Dopo aver rimosso l’indice 2: "updated", FALSE, 999 (gli elementi rimanenti si spostano)
Ricorda di usare le doppie parentesi [[ ]] per le modifiche e di assegnare NULL per rimuovere gli elementi.
Provalo tu
# Leggi l'input
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Tre valori separati da virgole
modify_input <- suppressWarnings(readLines(con, n = 1)) # Indice e nuovo valore
remove_index <- suppressWarnings(readLines(con, n = 1)) # Indice da rimuovere
close(con)
# Analizza i valori iniziali
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Analizza l'input per la modifica
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Analizza l'indice da rimuovere
rem_index <- as.numeric(remove_index)
# TODO: Scrivi il tuo codice qui sotto
# 1. Crea una lista con i tre valori iniziali (val1, val2, val3)
# 2. Stampa la lista originale
# 3. Modifica l'elemento all'indice mod_index con mod_value
# 4. Stampa la lista dopo la modifica
# 5. Aggiungi un nuovo quarto elemento con valore 999
# 6. Stampa la lista dopo l'aggiunta
# 7. Rimuovi l'elemento all'indice rem_index (usa NULL)
# 8. Stampa la lista finaleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori Parte 2
Operatori logici (AND, OR)Operatori logici Parte 2 (NOT)Ripasso - Logica sempliceLogica vettorializzata Parte 1Logica vettorializzata Parte 27Calcolatore per dividere il conto
Messaggio di benvenutoAcquisire input dell'utente10FizzBuzz con una variante
Panoramica del giocoLa funzione FizzBuzz13Vettori: argomenti avanzati
Slicing e indicizzazione dei vettoriIndicizzazione logicaAritmetica dei vettori e ricicloL’operatore %in%2Variabili e tipi di dati
Tipo di dato numericoTipo di dato interoTipo di dato carattereTipo di dato logicoControllo dei tipi di datoConvenzioni di denominazioneValori mancanti: NARiepilogo - Creazione di variabili8Cicli
Ciclo forCiclo whilebreaknext (continue)Riepilogo - FattorialeGenerazione di sequenze (seq, :)Cicli annidatiRiepilogo - Input dinamico11Vettori
Creare vettori con c()Accedere agli elementi dei vettoriModificare i vettoriOperazioni sui vettoriRipasso - Vettore dei prezziRipasso - Vettore invertitoVettori con nome14Liste in R
Creare listeAccedere agli elementi di una listaModificare le listeListe con nomiRiepilogo - Lista dei prodotti3Operatori Parte 1
Operatori aritmeticiDivisione intera e moduloOperatori di assegnazioneRiepilogo - Matematica sempliceOperatori di confronto6I/O di base
Stampare l'outputcat per l'outputOutput con variabiliLeggere l'input con readline()Nozioni di base sulla conversione dei tipiRiepilogo - Calcolatore dell'etàRiepilogo - Vero o falso9Funzioni
Dichiarare una funzioneArgomenti della funzioneValori di ritornoRiepilogo - Funzione SigmaRiepilogo - Funzione di validazioneValori predefiniti dei parametriEsercitati da solo: Compilatore R online