Vettori in R
I vettori sono la struttura dati fondamentale in R. Ogni singolo valore in R è in realtà un vettore di lunghezza uno. Comprendere i vettori è essenziale per lavorare efficacemente con questo linguaggio, poiché la maggior parte delle operazioni in R è progettata per funzionare in modo vettoriale.
Creare Vettori con c()
La funzione c() (che sta per “combine” o “concatenate”) è il modo principale per creare vettori in R:
# Vettore numerico
numeri <- c(10, 20, 30, 40, 50)
print(numeri)
# [1] 10 20 30 40 50
# Vettore di stringhe
frutti <- c("mela", "banana", "arancia", "kiwi")
print(frutti)
# [1] "mela" "banana" "arancia" "kiwi"
# Vettore logico
condizioni <- c(TRUE, FALSE, TRUE, TRUE, FALSE)
print(condizioni)
# [1] TRUE FALSE TRUE TRUE FALSE
Un vettore in R può contenere solo elementi dello stesso tipo. Se si mescolano tipi diversi, R eseguirà una conversione automatica (coercion):
misto <- c(1, "due", TRUE)
print(misto)
# [1] "1" "due" "TRUE"
# Tutto viene convertito in stringhe
Sequenze con seq() e Operatore :
Per creare sequenze di numeri, R offre l’operatore : e la funzione seq():
# Operatore : per sequenze semplici
sequenza <- 1:10
print(sequenza)
# [1] 1 2 3 4 5 6 7 8 9 10
# Sequenza decrescente
decrescente <- 10:1
print(decrescente)
# [1] 10 9 8 7 6 5 4 3 2 1
# seq() per sequenze personalizzate
passo <- seq(from = 0, to = 1, by = 0.2)
print(passo)
# [1] 0.0 0.2 0.4 0.6 0.8 1.0
# seq() con lunghezza specificata
equidistanti <- seq(from = 1, to = 100, length.out = 5)
print(equidistanti)
# [1] 1.00 25.75 50.50 75.25 100.00
Ripetizioni con rep()
La funzione rep() crea vettori con elementi ripetuti:
# Ripetere un valore
cinque_zeri <- rep(0, times = 5)
print(cinque_zeri)
# [1] 0 0 0 0 0
# Ripetere un vettore
ripetuto <- rep(c(1, 2, 3), times = 3)
print(ripetuto)
# [1] 1 2 3 1 2 3 1 2 3
# Ripetere ogni elemento
ciascuno <- rep(c(1, 2, 3), each = 3)
print(ciascuno)
# [1] 1 1 1 2 2 2 3 3 3
Accesso per Indice
In R, gli indici partono da 1 (non da 0 come in molti altri linguaggi):
voti <- c(28, 30, 25, 27, 30, 24)
# Accesso a un singolo elemento
print(voti[1])
# [1] 28
print(voti[4])
# [1] 27
# Slicing: selezionare un intervallo
print(voti[2:5])
# [1] 30 25 27 30
# Selezionare elementi specifici
print(voti[c(1, 3, 6)])
# [1] 28 25 24
# Escludere elementi con indici negativi
print(voti[-1])
# [1] 30 25 27 30 24
print(voti[c(-2, -4)])
# [1] 28 25 30 24
Vettori Logici per il Filtraggio
Una delle funzionalità più potenti di R è l’uso di vettori logici per filtrare i dati:
temperature <- c(18, 22, 35, 15, 28, 40, 12)
# Creare un vettore logico
calde <- temperature > 25
print(calde)
# [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE
# Usare il vettore logico per filtrare
print(temperature[calde])
# [1] 35 28 40
# Filtraggio diretto in un'unica espressione
print(temperature[temperature >= 20 & temperature <= 30])
# [1] 22 28
# which() restituisce gli indici degli elementi TRUE
print(which(temperature > 25))
# [1] 3 5 6
Operazioni Vettoriali
R esegue le operazioni elemento per elemento sui vettori, senza bisogno di cicli espliciti:
a <- c(1, 2, 3, 4, 5)
b <- c(10, 20, 30, 40, 50)
# Operazioni aritmetiche elemento per elemento
print(a + b)
# [1] 11 22 33 44 55
print(a * b)
# [1] 10 40 90 160 250
print(b / a)
# [1] 10 10 10 10 10
# Operazione con uno scalare
print(a * 3)
# [1] 3 6 9 12 15
# Funzioni matematiche vettoriali
print(sqrt(a))
# [1] 1.000000 1.414214 1.732051 2.000000 2.236068
# Funzioni statistiche
prezzi <- c(12.5, 8.3, 15.7, 9.1, 22.0)
print(sum(prezzi))
# [1] 67.6
print(mean(prezzi))
# [1] 13.52
print(min(prezzi))
# [1] 8.3
print(max(prezzi))
# [1] 22
Funzioni Utili per i Vettori
R offre numerose funzioni integrate per manipolare i vettori:
dati <- c(42, 17, 8, 35, 23, 51, 3)
# Lunghezza del vettore
print(length(dati))
# [1] 7
# Ordinamento crescente
print(sort(dati))
# [1] 3 8 17 23 35 42 51
# Ordinamento decrescente
print(sort(dati, decreasing = TRUE))
# [1] 51 42 35 23 17 8 3
# Invertire l'ordine
print(rev(dati))
# [1] 3 51 23 35 8 17 42
Vettori con Nomi
È possibile assegnare nomi agli elementi di un vettore per accedervi in modo più leggibile:
# Creare un vettore con nomi
voti_esami <- c(matematica = 28, fisica = 30, chimica = 25, informatica = 30)
print(voti_esami)
# matematica fisica chimica informatica
# 28 30 25 30
# Accesso per nome
print(voti_esami["fisica"])
# fisica
# 30
# Assegnare nomi dopo la creazione con names()
temperature <- c(22, 25, 18, 30)
names(temperature) <- c("Lunedi", "Martedi", "Mercoledi", "Giovedi")
print(temperature)
# Lunedi Martedi Mercoledi Giovedi
# 22 25 18 30
# Leggere i nomi
print(names(temperature))
# [1] "Lunedi" "Martedi" "Mercoledi" "Giovedi"
Conclusione
I vettori sono il cuore di R e la base su cui si costruiscono tutte le altre strutture dati. La capacità di creare vettori con c(), seq() e rep(), combinarli con operazioni vettoriali ed effettuare filtraggi con vettori logici rende R estremamente efficiente per l’analisi dei dati. Padroneggiare i vettori significa avere le fondamenta solide per lavorare con data frame, matrici e tutte le funzionalità avanzate di R.