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
Definizione

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
Tabella 1: Operatori relazionali in linguaggio R

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.

Definizione

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 3 \times 2:

> 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.

Definizione

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.

Definizione

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 restituisce TRUE se almeno uno degli elementi è vero.
  • La funzione all restituisce TRUE 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.

Definizione

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.

Consiglio

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 o FALSE.
  • 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 o FALSE, 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 e all possono essere applicate a vettori, matrici o array di valori logici e restituiscono un valore logico.
  • In R, TRUE è rappresentato come il numero 1 e FALSE come il numero 0.

Nella prossima lezione, vedremo come utilizzare gli operatori logici in R per combinare valori logici e ottenere nuove condizioni logiche.