R - I vettori
R
I vettori
Creazione di vettori
- Un vettore può essere creato utilizzando la funzione c() che sta per 'combine' e assegnato all'oggetto o in alternativa con la funzione assign().
# Creazione con c().
v1 <- c(1, 1, 2, 3, 5, 8, 13)
# Creazione con assign().
assign("v2", c(1, 1, 2, 3, 5, 8, 13))
- Un vettore può essere numerico, di stringhe o logico.
- Nella creazione del vettore logico si possono utilizzare gli alias 'T' e 'F' che stanno per True e False. Essi sono però delle variabili che possono essere riassegnate ad altro valore.
# Vettore numerico.
v1 <- c(1, 1, 2, 3, 5, 8, 13)
# Vettore di stringhe.
v2 <- c("Leonardo", "Michelangelo", "Tiziano")
# Vettore logico.
v3 <- c(FALSE, TRUE, FALSE, FALSE, TRUE)
# Vettore logico con gli alias.
v4 <- c(F, T, F, F, T)
- Creazione di un vettore contenente una sequenza di numeri.
# Sequenza da 1 a 10.
x <- c(1:10)
print(x)
[1] 1 2 3 4 5 6 7 8 9 10
# Sequenza da 10 a 1.
x <- c(10:1)
print(x)
[1] 10 9 8 7 6 5 4 3 2 1
- Creazione di un vettore contenente delle sequenze complesse di numeri, indicando il valore iniziale, quello finale, il passo o il numero di elementi.
# Sequenza da 5 a 10, passo 0.3.
x <- seq(from = 5, to = 10, by = 0.3)
print(x)
[1] 5.0 5.3 5.6 5.9 6.2 6.5 6.8 7.1 7.4 7.7 8.0 8.3 8.6 8.9 9.2 9.5 9.8
# Sequenza da 5 a 10, con 4 elementi.
x <- seq(from = 5, to = 10, length = 4)
print(x)
[1] 5.000000 6.666667 8.333333 10.000000
- Creazione di un vettore contenente sequenze ripetute di numeri.
x <- c(1, 2, 3)
# Ripete il vettore 5 volte.
v <- rep(x, times=5)
print(v)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
# Ripete ogni elemento 2 volte e il vettore 5 volte.
v <- rep(x, each=2, times=5)
print(v)
[1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3
- Creazione di vettori contenenti numeri casuali.
# Sequenze casuali dei primi 8 numeri senza ripetizioni.
x <- sample(8)
print(x)
[1] 1 4 7 6 8 5 3 2
# Sequenza casuale in un certo range; primo parametro è il range, secondo parametro è il numero di campioni.
x <- sample(1:10, 6)
print(x)
[1] 1 4 3 10 9 8
x <- sample(10:20, 25) # Dà errore, sono richiesti troppi campioni.
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
# Per permettere la ripetizione dei campioni, utilizzare l’argomento replace = TRUE.
sample(10:20, 25, replace = TRUE)
[1] 11 16 16 17 13 19 16 12 15 15 17 10 20 17 15 16 13 14 10 12 19 14 20 20 19
- Creazione di un vettore con inserimento manuale dei dati, utilizzando la funzione scan(). Per terminare l'inserimento basta inserire un elemento nullo.
x <- scan()
1: 3
2: 1
3: 4
4: 9
5: 2
6: 6
7: 5
8:
Read 7 items
print(x)
[1] 3 1 4 9 2 6 5
- Un vettore può essere vuoto, ma anche se vuoto, gli si può assegnare un elemento.
# Crea un vettore vuoto.
x <- numeric()
print(x)
numeric(0)
# Assegna il terzo elemento in un vettore vuoto.
x[3] <- 7
print(x)
[1] NA NA 7
- La lunghezza di un vettore (funzione length()) può essere variata.
- Se accorciata, vengono eliminati i valori.
- Se allungata, vengono aggiunti NA.
# Crea un vettore con 10 elementi.
x <- c(1:10)
print(x)
[1] 1 2 3 4 5 6 7 8 9 10
# Imposta lunghezza 5.
length(x) <- 5
print(x)
[1] 1 2 3 4 5
# Imposta lunghezza 7.
length(x) <- 7
print(x)
[1] 1 2 3 4 5 NA NA
Selezione di elementi da un vettore
- Dato un vettore è possibile selezionare uno o più elementi di esso.
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# Selezione di un elemento.
print(x[5])
[1] 5
# Selezione di più elementi.
print(x[c(5, 7)])
[1] 5 7
# Selezione di un range di elementi.
print(x[5:7])
[1] 5 6 7
# Selezione di tutti gli elementi eccetto alcuni.
print(x[c(-2, -4, -6, -8, -10)])
[1] 1 3 5 7 9
Ordinamento di un vettore
- Per ordinare un vettore utilizzare la funzione sort().
x <- c(11, 5, 7, 2, 3, 13)
# Ordinamento del vettore crescente.
print(sort(x))
[1] 2 3 5 7 11 13
# Ordinamento del vettore decrescente.
print(sort(x, decreasing = TRUE))
[1] 13 11 7 5 3 2
# Indici degli elementi del vettore ordinato.
print(order(x))
[1] 4 5 2 3 1 6
Operazioni su un vettore
- Dato un vettore è possibile eseguire diverse operazioni sugli elementi di esso. Per esempio estrarre gli elementi minimo e massimo, il numero di elementi, la somma e il prodotto di tutti gli elementi.
x <- c(1, 2, 3, 4, 5)
# Elemento minimo.
print(min(x))
[1] 1
# Elemento massimo.
print(max(x))
[1] 5
# Elementi minimo e massimo.
print(range(x))
[1] 1 5
# Numero degli elementi.
print(length(x))
[1] 5
# Somma di tutti gli elementi.
print(sum(x))
[1] 15
# Prodotto di tutti gli elementi.
print(prod(x))
[1] 120
- È possibile compiere operazioni aritmetiche su tutti gli elementi del vettore.
x <- c(1, 2, 3, 4, 5)
# Sommare o sottrarre una quantità.
y <- x + 5
z <- x - 5
print(y)
[1] 6 7 8 9 10
print(z)
[1] -4 -3 -2 -1 0
# Moltiplicare o dividere per una quantità.
y <- x * 5
z <- x / 5
print(y)
[1] 5 10 15 20 25
print(z)
[1] 0.2 0.4 0.6 0.8 1.0
- Di seguito, alcune operazioni statistiche su tutti gli elementi del vettore: media, mediana, varianza e deviazione standard.
x <- c(2, 3, 5, 7, 11, 13)
# La funzione mean() calcola la media.
print(mean(x))
[1] 6.833333
# La funzione median() calcola la mediana.
print(median(x))
[1] 6
# La funzione var() calcola la varianza.
print(var(x))
[1] 19.36667
# La funzione sd() calcola la deviazione standard.
print(sd(x))
[1] 4.400758
Operazioni su due vettori
- Le operazioni tra vettori sono eseguite elemento per elemento.
- Se i vettori non hanno la stessa lunghezza, quello più corto viene riciclato le volte necessarie al completamento dell'operazione.
- Il vettore più lungo deve avere una lunghezza multipla di quello di più corto, altrimenti si incorre in un errore.
- Il risultato è quindi un vettore la cui lunghezza è la massima lunghezza dei vettori di input.
# Somma di vettori con la stessa lunghezza.
x <- c(1, 2, 3, 4)
y <- c(10, 11, 12, 13)
print(x + y)
[1] 11 13 15 17
# Somma di vettori con lunghezza multipla.
x <- c(1, 2, 3, 4)
y <- c(10, 11)
print(x + y)
[1] 11 13 13 15
- La funzione paste() permette di unire due vettori di caratteri (se un vettore è numerico viene convertito in vettore di caratteri) in un vettore nel quale ogni elemento è l'unione dei corrispondenti elementi dei vettori dati.
- Il vettore risultante ha dimensione pari alla massima lunghezza dei vettori origine e il vettore di dimensione inferiore viene eventualmente riciclato.
- Il separatore di default è lo spazio.
# Unione di due vettori con separatore '-'.
x <- paste(c("A", "B", "C"), c(1, 2, 3, 4, 5), sep = "-")
print(x)
[1] "A-1" "B-2" "C-3" "A-4" "B-5"
- Tra due vettori può essere eseguita l'operazione statistica detta correlazione, con la funzione cor().
# Correlazione.
x <- c(11, 5, 7, 2, 3, 13)
y <- c(22, 4, 8, 4, 3, 10)
print(cor(x, y))
[1] 0.7406585
Assegnazione di nomi al vettore
- Una volta creato un vettore, in molti casi è utile dare un nome agli elementi di esso.
- Lo si può fare utilizzando la funzione names().
x <- c(1:4)
print(x)
[1] 1 2 3 4
# Assegnazione dei nomi al vettore
names(x) <- c("Nord", "Sud", "Ovest", "Est")
print(x)
Nord Sud Ovest Est
1 2 3 4
Prodotto esterno (Outer Product)
- Il prodotto esterno tra due vettori di dimensione m e n, dà come risultato una matrice di dimensione mxn. Ogni elemento della matrice è il prodotto tra un elemento del primo vettore con un elemento del secondo vettore.
- Lo si può fare con la funzione outer().
# Prodotto esterno fatto in due modi, il risultato è lo stesso.
x <- c(1:3)
y <- c(5:8)
print(x %o% y)
print(outer(x, y, "*"))
[,1] [,2] [,3] [,4]
[1,] 5 6 7 8
[2,] 10 12 14 16
[3,] 15 18 21 24