I vettori sono una struttura dati unidimensionale e sono la più semplice presente in R.
Caratteristiche di un vettore
la lunghezza: il numero di elementi da cui è formato il vettore
la tipologia: la tipologia di dati da cui è formato il vettore. Un vettore infatti deve esssere formato da elementi tutti dello stesso tipo!
Caratteristiche degli elementi di un vettore
un valore: il valore dell’elemento che può essere di qualsiasi tipo ad esempio un numero o una serie di caratteri
un indice di posizione: un numero intero positivo che identifica la sua posizione all’interno del vettore.
Creare un vettore
I vettori si possono creare attraverso il comando c(), indicando tra le parentesi i valori degli elementi nella sucessione desiderata e separati da una virgola.
num_vect =c(1,2,3,4)# è possibile anche utilizzare la funzione seq()num_vect_seq =seq(from =1,to =4, by =1)num_vect;num_vect_seq
[1] 1 2 3 4
[1] 1 2 3 4
char_vect =c("R","R","R","ok")# è possibile anche utilizzare la funzione rep()char_vect_rep =c(rep("R", 3), "ok")char_vect;char_vect_rep
[1] "R" "R" "R" "ok"
[1] "R" "R" "R" "ok"
Tiplogia di vettore
La tipologia di dati da cui è formato il vettore.
class(num_vect)
[1] "numeric"
class(char_vect)
[1] "character"
Tiplogia di vettore
Un vettore deve esssere formato da elementi tutti dello stesso tipo!
wrong =c(1,2,3,"non so", 4)class(wrong)
[1] "character"
wrong
[1] "1" "2" "3" "non so" "4"
Altrimenti si “rischia” che tutto venga trasformato a carattere.
correct =c(1,2,3,NA, 4)class(correct)
[1] "numeric"
correct
[1] 1 2 3 NA 4
is.* & as.*
Possiamo testare o convertire (quando possibile) la tipologia del vettore attraverso queste funzioni is. & as.
Ogni elemento del vettore può essere associato ad un nome.
names(num_vect) #nessun nome associato
NULL
names(num_vect) = letters[1:4]num_vect
a b c d
1 2 3 4
Ogni vettore è caraterizzato da una dimensione (dim()), in realtà essendo il vettore unidimensionale usiamo il comando length() per ottenere la lunghezza del vettore
dim(num_vect)
NULL
length(num_vect)
[1] 4
Indicizzazione
Possiamo selezionare, eliminare, estrarre elementi semplicemente usando l’indice di posizione tramite le parentesi quadre vettore[pos]
# Creo un vettore formato da 20 numeri casuali pescati da 1 a 100my_vect =round(runif(n =20,min =1, max =100))my_vect
a b c d e f g h i j k l m n o p q r s t
84 93 47 61 22 12 44 25 63 61 63 76 60 18 55 50 17 67 88 28
my_vect["a"]
a
84
my_vect[1]
a
84
Indicizzazione Logica
Indicizzare con la posizione è l’aspetto più semplice e intuitivo. E’ possibile anche selezionare tramite valori TRUE e FALSE: possiamo estrarre elementi dal vettore basandoci su specifiche condizioni logiche
numeri =1:7numeri
[1] 1 2 3 4 5 6 7
numeri[numeri<2]
[1] 1
L’idea è che se abbiamo un vettore di lunghezza n e un’altro vettore logico di lunghezza n, tutti gli elementi TRUE saranno selezionati:
numeri<2# vettore logico
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE
# verrà quindi estratto il primo elemento # perchè è l'unico che risulta TRUEnumeri[numeri<2]
[1] 1
# non vale solo per elementi del vettore numeri ma per qualsiasi vettore lettere = letters[1:6]lettere
[1] "a" "b" "c" "d" "e" "f"
lettere[numeri<2]
[1] "a"
Indicizzazione Interna
Attraverso la funzione which() possiamo ottenere la posizione associata ad una selezione logica:
lettere
[1] "a" "b" "c" "d" "e" "f"
which(lettere =="a")
[1] 1
my_vect
a b c d e f g h i j k l m n o p q r s t
84 93 47 61 22 12 44 25 63 61 63 76 60 18 55 50 17 67 88 28
which(my_vect >20)
a b c d e g h i j k l m o p r s t
1 2 3 4 5 7 8 9 10 11 12 13 15 16 18 19 20
my_vect[which(my_vect >20)] # Cosa cambia tra questi 2 comandi?
a b c d e g h i j k l m o p r s t
84 93 47 61 22 44 25 63 61 63 76 60 55 50 67 88 28
Indicizzazione e assegnazione
Indicizzare può essere utile anche per assegnare un valore ad un determinato elemento del vettore
lettere
[1] "a" "b" "c" "d" "e" "f"
lettere[1] ="z"lettere
[1] "z" "b" "c" "d" "e" "f"
lettere[9] ="?"lettere
[1] "z" "b" "c" "d" "e" "f" NA NA "?"
# Possiamo anche modificare l'elementolettere[2] =paste(lettere[2], sep ="", "o")lettere
[1] "z" "bo" "c" "d" "e" "f" NA NA "?"
Operazioni sui vettori
Possiamo eseguire operazioni sui vettori, ed applicare la stessa operazione a tutti gli elementi del vettore (element-wise)