Pagina personale di:
Carlo Vecchio
appunti di C#, R, SQL Server, ASP.NET, algoritmi, numeri
Vai ai contenuti

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





© 2020 Carlo Vecchio
Torna ai contenuti