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
any
restituisceTRUE
se almeno uno degli elementi è vero. - La funzione
all
restituisceTRUE
solo 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:
TRUE
oFALSE
. - 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,
TRUE
oFALSE
, 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
any
eall
possono essere applicate a vettori, matrici o array di valori logici e restituiscono un valore logico. - In R,
TRUE
è rappresentato come il numero1
eFALSE
come il numero0
.
Nella prossima lezione, vedremo come utilizzare gli operatori logici in R per combinare valori logici e ottenere nuove condizioni logiche.