Slicing e indicizzazione dei vettori
Fa parte della sezione Fondamenti del percorso R di Coddy. Lezione 67 di 78.
Hai imparato ad accedere ai singoli elementi e a scorrere i vettori. Ora scopriamo come estrarre più elementi contemporaneamente usando lo slicing. Questa tecnica ti permette di ottenere un sottoinsieme di un vettore con una sola operazione.
Per estrarre più elementi, passa un vettore di indici tra parentesi quadre:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Output:
[1] 10 30 50Puoi anche usare l'operatore due punti per selezionare un intervallo di elementi consecutivi:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Output:
[1] 20 30 40Gli indici negativi sono potenti in R. Escludono gli elementi invece di selezionarli:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Output:
[1] 10 30 40 50Puoi escludere più elementi passando un vettore di indici negativi:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Output:
[1] 20 30 40Ricorda: non puoi combinare indici positivi e negativi nella stessa selezione. R genererà un errore se provi numbers[c(1, -2)].
Sfida
FacileRiceverai due righe di input:
- Un elenco di numeri separati da virgole (ad es.,
100,200,300,400,500,600,700) - Due indici separati da una virgola che rappresentano un intervallo da escludere (ad es.,
2,5)
Il codice iniziale legge già l'input e crea il vettore numerico. Stampa esattamente quattro righe, in quest'ordine:
- Stampa gli elementi nelle posizioni 1, 3 e 5 usando un vettore di indici
- Stampa gli elementi dalla posizione 2 alla posizione 4 usando l'operatore dei due punti
- Stampa il vettore escludendo l'elemento all'indice specificato per primo (usando l'indicizzazione negativa)
- Stampa il vettore escludendo gli elementi dal primo indice al secondo indice (usando l'indicizzazione negativa con un intervallo)
Ad esempio, se gli input sono:
10,20,30,40,50,60,70
3,5L'output dovrebbe essere:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Spiegazione:
- Gli elementi nelle posizioni 1, 3 e 5 sono: 10, 30, 50
- Gli elementi dalla posizione 2 alla posizione 4 sono: 20, 30, 40
- Escludendo la posizione 3 si ottiene: 10, 20, 40, 50, 60, 70
- Escludendo le posizioni dalla 3 alla 5 si ottiene: 10, 20, 60, 70
Provalo tu
# Leggi l'input
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Converti i numeri separati da virgole in un vettore numerico
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Converti i due indici
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Scrivi il tuo codice qui sotto
# 1. Stampa gli elementi nelle posizioni 1, 3 e 5 usando un vettore di indici
# 2. Stampa gli elementi dalla posizione 2 alla posizione 4 usando l'operatore due punti
# 3. Stampa il vettore escludendo l'elemento nella posizione idx1 (indicizzazione negativa)
# 4. Stampa il vettore escludendo gli elementi da idx1 a idx2 (indicizzazione negativa con un intervallo)Questa 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 dinamico3Operatori 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