Linguaggio R. Le operazioni con i vettori.

Cerca nel sito

Altri risultati..

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors


Indice

Vettori, arrays, liste




Uno dei vantaggi di linguaggi tipo R rispetto ad altri linguaggi consiste nella gestione compatta di strutture di dati:
• I ‘vettori’ possono contenere solo dati omogenei (numerici o caratteri).
• Gli arrays possono essere estensioni multidimensionali (a molti indici) dei vettori. Il caso a due indici è una matrice
• Le liste sono ‘collezioni ordinate di oggetti’, anche di tipo diverso.


Creazione di un vettore

La struttura dati più semplice disponibile in R è un vettore. È possibile creare vettori di valori numerici, valori logici e stringhe di caratteri utilizzando la funzione c() . Per esempio:


c(1, 2, 3)
 [1] 1 2 3
c(TRUE, TRUE, FALSE)
 [1] TRUE TRUE FALSE
c(“a”, “b”, “c”)
[1] “a” “b” “c”
Puoi anche unire più vettori usando la funzione c() .

x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
 [1] 1 2 5 3 4 6

con list() :

xl <- list(‘a’ = 5, ‘b’ = 6, ‘c’ = 7, ‘d’ = 8)
e si ottiene:

> xl
$a
[1] 5

$b
[1] 6

$c
[1] 7

$d
[1] 8

Accedere agli elementi di un vettore

Il meccanismo di accesso agli elementi di un vettore è uguale a python: mediante la sintassi a parentesi quadre. Tuttavia, gli indici in R partono da 1:

P <- c(“uno”, “nessuno”, “centomila”)
> P[2]
[1] “nessuno”

• Possiamo specificare degli intervalli di valori utilizzando i due punti, per ricavare i valori del vettore con quegli indici
• Specificando P[n1:n2] otteniamo tutti i valori del vettore P, dall’indice n1 all’indice n2 (compreso)

P[1:2]
[1] “uno”, “nessuno”

• Si può accedere agli elementi di un vettore caratterizzati da specifici indici.
Tali indici devono essere specificati in un vettore creato con c().

> A <- c(10, 100, 1000, 10000, 100000)
> A[ c(2, 4) ]
[1] 100 10000

• Possiamo specificare quali elementi non visualizzare utilizzando indici negativi (semantica ben diversa da python!)

Ti potrebbe interessare anche:  Uomini dietro le macchine

A <- c(1,2,5,6,7,8)
> A
[1] 1 2 5 6 7 8
> A[ -c(2,4) ]
[1] 1 5 7 8

• Possiamo applicare operazioni logiche su tutti gli elementi di un vettore
• Il risultato è un vettore booleano con i risultati
Ad es., possiamo chiedere quali elementi siano maggiori di un certo valore (2) e  contemporaneamente minori di un certo valore (7):
> A
[1] 1 2 5 6 7 8
> A>2 & A<7
[1] FALSE FALSE TRUE TRUE FALSE FALSE

• In R si può utilizzare un vettore booleano per decidere quali elementi di un vettore debbano essere utilizzati
• Se l’elemento i-esimo del vettore booleano è TRUE, l’elemento i-esimo del vettore viene utilizzato; altrimenti viene scartato. Combinando le due cose si ottiene:

A[ A>2 & A<7]
[1] 5 6

in alternativa:

V<- c(6,5,3,4,1,6,2,8,1,4,10)
> V
[1] 6 5 3 4 1 6 2 8 1 4 10

cond <- V>5
> V1<- V[cond]
> V1
[1] 6 6 8 10

Vettori da costruire in costanti: Sequenze di lettere e nomi dei mesi.

R ha un numero di costanti costruite. Sono disponibili le seguenti costanti:

LETTERS : le 26 lettere maiuscole dell’alfabeto romano
letters : le 26 lettere minuscole dell’alfabeto romano
month.abb : le abbreviazioni di tre lettere per i nomi dei mesi inglesi
month.name : i nomi inglesi per i mesi dell’anno
pi : il rapporto tra la circonferenza di un cerchio e il suo diametro

I vettori possono essere creati dalle costanti precedentemente definite.

1) Sequenze di lettere:

> letters
[1] “a” “b” “c” “d” “e” “f” “g” “h” “i” “j” “k” “l” “m” “n” “o” “p” “q” “r” “s” “t” “u” “v” “w” “x” “y” “z”

> LETTERS[7:9]
[1] “G” “H” “I”

> letters[c(1,5,3,2,4)]
[1] “a” “e” “c” “b” “d”

2) Sequenze di abbreviazioni del mese o nomi di mesi:

> month.abb
[1] “Jan” “Feb” “Mar” “Apr” “May” “Jun” “Jul” “Aug” “Sep” “Oct” “Nov” “Dec”

Ti potrebbe interessare anche:  Googliamo???

> month.name[1:4]
[1] “January” “February” “March” “April”

month.abb[c(3,6,9,12)]
[1] “Mar” “Jun” “Sep” “Dec”

Assegnare nomi ai vettori.

Possiamo assegnare dei “nomi” agli elementi di un vettore con la funzione names() e recuperare i valori utilizzando tali nomi:

S <- c( “giovanni”, “Rossi”, “Milano”)
> S
[1] “giovanni” “Rossi” “Milano”
> names(S) <- c(“Nome”, “Cognome”, “Città”)
> S
Nome Cognome Città
“giovanni” “Rossi” “Milano”

S
Nome Cognome Città
“giovanni” “Rossi” “Milano”
> S[“Nome”]
Nome
“giovanni”

Operazioni vettoriali.

• In maniera molto simile a python e numpy, possiamo utilizzare i vettori per effettuare delle operazioni vettoriali (ad es., la somma)
> A <- c(1,2,3,4,5)
> B <- c(9,8,7,6,5)
> A+B
[1] 10 10 10 10 10
• A differenza di numpy, che si arrabbia tantissimo, con R possiamo sommare vettori di lunghezza diversa
• R risolve il problema “allungando” il vettore più corto, “riciclando” i numeri precedenti
• ATTENZIONE! R non stampa alcun messaggio nel caso in cui la lunghezza del vettore più lungo è un multiplo di quello più corto
> C <- c(9,8)
> A+C
[1] 10 10 12 12 14
Warning message:
In A + C : longer object length is not a multiple of shorter object length
Riflettete sul perché si ottenga questo risultato

Altre funzioni utili sui vettori.

length(V): restituisce la lunghezza del vettore V
mode(V): restituisce il tipo di dato usato dal vettore V
sort(V): restituisce la versione ordinata del vettore V
order(V): restituisce i nuovi indici degli elementi dopo un ordinamento
rev(V): restituisce il vettore invertito.

vett<- c(6,5,3,4,1,6,2,8,1,4,10)
> sort(vett)
[1] 1 1 2 3 4 4 5 6 6 8 10
> mode(vett)
[1] “numeric”
> length(vett)
[1] 11
> order(vett)
[1] 5 9 7 3 4 10 2 1 6 8 11
> rev(vett)
[1] 10 4 1 8 2 6 1 4 3 5 6

Altre funzioni vettoriali utili.

min(V), max(V): restituiscono, rispettivamente, il valore minimo e massimo contenuti nel vettore V
range(V): restituisce c(min(V), max(V))
sum(V), prod(V): restituiscono, rispettivamente, la somma e il prodotto di tutti i valori in V

Ti potrebbe interessare anche:  La Formattazione

median(V): restituisce la mediana del vettore V
mean(V), var(V), sd(V): restituiscono, rispettivamente, la media aritmetica, la varianza e la deviazione standard dei valori contenuti in V.

summary(V): minimo, 1°quartile, mediana, media, 3°quartile, massimo di V

quantile(V,0.05): quantile al 5% di V ( probs = 0.05)

• Note 1: Equivale alla funzione median() quando probs = 0.5.
• Note 2: Equivale alla funzione min() quando probs = 0.
• Note 3: Equivale alla funzione max() quando probs = 1.

V<- c(6,5,3,4,1,6,2,8,1,4,10)
> V
[1] 6 5 3 4 1 6 2 8 1 4 10
> min(V)
[1] 1
> max(V)
[1] 10
> range(V)
[1] 1 10
> sum(V)
[1] 50
> prod(V)
[1] 1382400
> mean(V) # media aritmetica
[1] 4.545455
> var(V) #varianza
[1] 8.072727
> sd(V) #deviazione standard
[1] 2.841255

quantile(V, probs = 0.25)
25%
2.5

summary(V)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 2.500 4.000 4.545 6.000 10.000
> median (V)
[1] 4

 

Le successive funzioni sono presenti nel pacchetto labstatR scaricabile qui:

oppure dalla stesso ambiente Rgui:

meang(V): restituisce la media geometrica del vettore V

Esempio media geometrica:

media geometrica
> x <- c(1.2, 2.3, 4.5, 6.5)
> n <- 4
> prod(x)^(1/n)
[1] 2.997497
> meang(x) # otteniamo lo stesso risultato!
[1] 2.997497

 meana(V): restituisce la media armonica  del vettore V

Esempio media armonica:

media armonica

> x <- c(1.2, 2.3, 4.5, 6.5)
> 1/mean(1/x)
[1] 2.432817
> meana(x)
[1] 2.432817

(607)