Valori Logici o Booleani in R
Nelle lezioni precedenti abbiamo sempre lavorato con valori numerici. Il linguaggio R, però, supporta anche altri tipi di dati. In questa lezione, vedremo i valori logici o booleani.
Tali valori sono utilizzati per rappresentare le condizioni di verità o falsità di una proposizione logica. In R, i valori logici possono assumere solo due valori: TRUE o FALSE.
Oggetti Logici in R
In linguaggio R, gli oggetti di tipo logico, chiamati semplicemente oggetti logici o booleani, sono oggetti che possono assumere esclusivamente due valori: TRUE o FALSE. Questi valori sono utilizzati per rappresentare le condizioni di verità o falsità di una proposizione logica.
Questo è un concetto che appare sempre nei linguaggi di programmazione, in quanto è alla base delle strutture di controllo del flusso di esecuzione di un programma.
Abbiamo già incontrato i valori logici in R, ad esempio quando abbiamo costruito le matrici per riga anziché per colonna:
> m <- matrix(1:6, nrow = 2, byrow = TRUE)
> m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
In questo caso, il valore TRUE è stato utilizzato per specificare che la matrice m deve essere costruita per riga.
I valori logici in R possono essere scritti in maniera completa, quindi TRUE e FALSE, oppure abbreviati in T e F. In entrambi i casi, R riconosce i valori logici e li interpreta correttamente.
Possiamo assegnare valori logici ad oggetti, ad esempio:
> x <- TRUE
> y <- FALSE
> x
[1] TRUE
> y
[1] FALSE
Analogamente, possiamo costruire vettori e matrici di valori logici:
> v <- c(TRUE, FALSE, TRUE, TRUE)
> v
[1] TRUE FALSE TRUE TRUE
> m <- matrix(c(TRUE, FALSE, TRUE, TRUE), nrow = 2)
> m
[,1] [,2]
[1,] TRUE TRUE
[2,] FALSE TRUE
Valori Logici o Booleani in R
Un valore logico in R può assumere solo due valori: TRUE o FALSE. Questi valori sono utilizzati per rappresentare le condizioni di verità o falsità di una proposizione logica.
Le costanti TRUE e FALSE possono essere scritte in maniera completa o abbreviata in T e F.
Un oggetto di tipo logico è un oggetto che contiene un valore logico.
In R è possibile creare scalari, vettori e matrici di valori logici.
Operatori Relazionali
I valori logici in R sono, spesso, il risultato di operazioni di confronto tra valori. Nei programmi, è molto comune dover confrontare due valori per verificare se sono uguali, diversi, maggiori o minori.
Ad esempio, potremmo dover confrontare, all'interno del nostro programma, se un determinato valore contenuto in a sia maggiore di un altro valore contenuto in b. Per fare ciò, possiamo utilizzare gli operatori relazionali:
> a <- 5
> b <- 3
> a > b
[1] TRUE
In questo caso abbiamo usato l'operatore > per confrontare se il valore di a è maggiore del valore di b. Il risultato di questa operazione è un valore logico, in questo caso TRUE.
Esistono sei operatori relazionali in R, riportati nella tabella che segue:
| Operatore | Descrizione | Esempio |
|---|---|---|
> |
Maggiore | a > b |
< |
Minore | a < b |
>= |
Maggiore o uguale | a >= b |
<= |
Minore o uguale | a <= b |
== |
Uguale | a == b |
!= |
Diverso | a != b |
Tipicamente, questi operatori vengono applicati a valori numerici anche se esistono delle eccezioni. Vediamo degli esempi:
> 5 > 3
[1] TRUE
> 5 < 3
[1] FALSE
> 5 >= 3
[1] TRUE
> 5 <= 3
[1] FALSE
> 5 == 3
[1] FALSE
> 5 != 3
[1] TRUE
Questi esempi sono abbastanza autoesplicativi. In generale, gli operatori relazionali restituiscono un valore logico, TRUE o FALSE, a seconda del risultato del confronto.
Operatori Relazionali in R
Gli operatori relazionali in R sono utilizzati per confrontare due valori e restituire un valore logico, TRUE o FALSE, a seconda del risultato del confronto.
Gli operatori relazionali sono sei:
>: maggiore<: minore>=: maggiore o uguale<=: minore o uguale==: uguale!=: diverso
Gli operatori relazionali vengono applicati a valori numerici e restituiscono un valore logico.
Operatori Relazionali e Vettorizzazione
Abbiamo già studiato, in precedenza, la tecnica della vettorizzazione in R: la capacità di applicare una funzione o un operatore ad un vettore di valori.
Uno dei punti di forza del linguaggio R è che possiamo applicare la vettorizzazione anche agli operatori relazionali. Questo significa che possiamo confrontare due vettori di valori e ottenere un vettore di valori logici come risultato.
Chiariamo con un esempio. Supponiamo di avere due vettori di uguale lunghezza:
> v1 <- c(1, 2, 3, 4, 5)
> v2 <- c(3, 2, 1, 4, 5)
Possiamo confrontare i due vettori con un qualunque operatore relazionale:
> v1 > v2
[1] FALSE FALSE TRUE FALSE FALSE
> v1 < v2
[1] TRUE FALSE FALSE FALSE FALSE
> v1 == v2
[1] FALSE TRUE FALSE TRUE TRUE
> v1 != v2
[1] TRUE FALSE TRUE FALSE FALSE
In questo caso, abbiamo confrontato i due vettori v1 e v2 con gli operatori >, <, == e !=. Il risultato di ciascuna operazione è un vettore di valori logici.
Gli elementi dei risultati rappresentano il risultato del confronto tra gli elementi corrispondenti dei due vettori. Ad esempio, il primo elemento del vettore v1 > v2 è FALSE perché 1 > 3 è falso. Il secondo elemento è FALSE perché 2 > 2 è falso. E così via.
Lo stesso meccanismo si applica anche alle matrici e agli array multidimensionali. Ad esempio possiamo confrontare due matrici
> m1 <- matrix(1:6, nrow = 3)
> m2 <- matrix(6:1, nrow = 3)
> m1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> m2
[,1] [,2]
[1,] 6 3
[2,] 5 2
[3,] 4 1
> m1 < m2
[,1] [,2]
[1,] TRUE FALSE
[2,] TRUE FALSE
[3,] TRUE FALSE
> m1 == m2
[,1] [,2]
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] FALSE FALSE
In questo caso, abbiamo confrontato le due matrici m1 e m2 con gli operatori < e ==. Il risultato è una matrice di valori logici.
Operatori Relazionali e Vettorizzazione in R
In R è possibile applicare la vettorizzazione anche agli operatori relazionali.
Questo significa che possiamo confrontare due vettori, matrici o array multidimensionali di valori e ottenere un vettore, una matrice o un array multidimensionale di valori logici come risultato.
Il risultato del confronto tra due oggetti è un oggetto di valori logici che rappresenta il risultato del confronto tra gli elementi corrispondenti degli oggetti.
Funzioni any e all
Due importanti funzioni del linguaggio R che vengono usate in congiunzione con la vettorizzazione e gli operatori relazionali sono any e all.
La funzione any restituisce TRUE se almeno uno degli elementi di un vettore, matrice o array, è vero. Altrimenti, restituisce FALSE.
Ad esempio, consideriamo il vettore v:
> v <- c(10, 20, 30, 40, 50)
Se vogliamo verificare se almeno uno degli elementi di v è maggiore di 30, possiamo usare la funzione any:
> any(v > 30)
[1] TRUE
In questo caso, la funzione any restituisce TRUE perché se prendiamo il risultato di v > 30, otteniamo il vettore FALSE FALSE FALSE TRUE TRUE, e ci sono due valori TRUE.
La funzione all, invece, restituisce TRUE solo se tutti gli elementi di un vettore, matrice o array, sono veri. Altrimenti, restituisce FALSE.
Riconsiderando il vettore v, possiamo verificare se tutti gli elementi di v sono maggiori di 5:
> all(v > 5)
[1] TRUE
In questo caso, la funzione all restituisce TRUE perché tutti gli elementi di v sono maggiori di 5.
Funzioni any e all in R
Le funzioni any e all possono essere applicate a vettori, matrici o array di valori logici e restituiscono un valore logico.
- La funzione
anyrestituisceTRUEse almeno uno degli elementi è vero. - La funzione
allrestituisceTRUEsolo se tutti gli elementi sono veri.
Relazione tra Valori Logici e Numeri
Sebbene i valori logici in R siano rappresentati da TRUE e FALSE, internamente esiste una relazione tra i valori logici e i numeri.
In particolare, R rappresenta TRUE come il numero 1 e FALSE come il numero 0. Questo significa che possiamo usare i valori logici in operazioni aritmetiche.
Ad esempio, possiamo effettuare una somma tra due o più valori logici:
> TRUE + TRUE
[1] 2
> TRUE + FALSE
[1] 1
> T + T + T + T + F
[1] 4
Nel primo caso, è come se avessimo sommato 1 + 1, ottenendo 2. Nel secondo caso, è come se avessimo sommato 1 + 0, ottenendo 1. Nel terzo caso, è come se avessimo sommato 1 + 1 + 1 + 1 + 0, ottenendo 4.
Il vantaggio di poter utilizzare i valori TRUE e FALSE come se fossero i numeri 1 e 0 è che possiamo sfruttare questa caratteristica per estrarre informazioni da un vettore di valori logici.
Ad esempio, prendiamo il vettore v:
> v <- c(4, 12, 7, 3, 9)
Supponiamo di voler trovare il numero di elementi di v tali che siano maggiori di 5. Possiamo usare il confronto v > 5 per ottenere un vettore di valori logici e poi sommare i valori logici:
> sum(v > 5)
[1] 3
In questo caso, il risultato di v > 5 è il vettore FALSE TRUE TRUE FALSE TRUE. La funzione sum somma i valori logici, ottenendo 3.
Relazione tra Valori Logici e Numeri in R
In R, TRUE è rappresentato come il numero 1 e FALSE come il numero 0.
Questo significa che possiamo utilizzare i valori logici in operazioni aritmetiche.
Conteggio degli Elementi di un Vettore o Matrice che Soddisfano una Condizione
Per contare il numero di elementi di un vettore, matrice o array che soddisfano una condizione, possiamo combinare gli operatori relazionali con la funzione sum.
Ad esempio, dato un vettore v, possiamo contare il numero di elementi che sono maggiori di un certo valore x con:
sum(v > x)
In Sintesi
In questa lezione abbiamo studiato che:
- In linguaggio R, gli oggetti di tipo logico, chiamati oggetti logici o booleani, possono assumere solo due valori:
TRUEoFALSE. - I valori logici sono utilizzati per rappresentare le condizioni di verità o falsità di una proposizione logica.
- Gli operatori relazionali in R sono utilizzati per confrontare due valori e restituire un valore logico,
TRUEoFALSE, a seconda del risultato del confronto. - In R è possibile applicare la vettorizzazione anche agli operatori relazionali, ottenendo un vettore, una matrice o un array multidimensionale di valori logici come risultato.
- Le funzioni
anyeallpossono essere applicate a vettori, matrici o array di valori logici e restituiscono un valore logico. - In R,
TRUEè rappresentato come il numero1eFALSEcome il numero0.
Nella prossima lezione, vedremo come utilizzare gli operatori logici in R per combinare valori logici e ottenere nuove condizioni logiche.