Confrontare matrici
La capacità di R di gestire diverse strutture dati nei confronti non si ferma ai vettori. Matrici e operatori relazionali funzionano insieme senza problemi!
Invece dei vettori (come nell'esempio precedente), i dati di DataCamp e YouTube sono ora memorizzati in una matrice chiamata views. La prima riga contiene le informazioni di DataCamp; la seconda riga quelle di YouTube. Userai la funzione matrix integrata in R per creare una matrice con l'aiuto dei vettori datacamp e youtube creati nell'esempio precedente.
datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
views <- matrix(c(datacamp_views, youtube_views), nrow = 2, byrow = TRUE)
views
| 100 | 20 | 5 | 200 | 60 | 88 | 190 | 33 | 290 | 64 |
| 10 | 20 | 1000 | 64 | 100 | 9 | 19 | 3 | 90 | 4 |
Scopriamo quando le visualizzazioni sia di datacamp che di youtube sono state uguali a 20.
views == 20
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
Ottimo! Hai capito come funzionano gli operatori relazionali, ora passiamo agli operatori logici.
Operatori logici
R ti aiuta a combinare i risultati degli operatori relazionali fornendoti i seguenti operatori logici:
- Operatore
AND( & ) - Operatore
OR( | ) - Operatore
NOT( ! )
Diamo un'occhiata a ciascuno di loro.
- Operatore AND: Come in qualsiasi altro linguaggio di programmazione, l'operatore AND di R prende due valori logici e restituisce TRUE solo e soltanto se entrambi risultano veri, altrimenti restituisce false.
Vediamo alcuni esempi autoesplicativi.
TRUE & TRUE # 1.1 = 1
TRUE
TRUE & FALSE # 1.0 = 0
FALSE
FALSE & FALSE # 0.0 = 0
FALSE
FALSE & TRUE # 0.1 = 0
FALSE
Allo stesso modo, invece di usare valori logici come sopra, puoi usare i risultati dei comparatori con questi operatori.
x <- 100
x < 200 & x >= 100 # dato che x è minore di 200 ma maggiore o uguale a 100, restituisce TRUE.
TRUE
x < 200 & x > 100 # questo è FALSE perché il secondo confronto, cioè x maggiore di 100, è falso.
FALSE
- Operatore OR: L'operatore OR è piuttosto simile all'AND. Tuttavia, la differenza principale è che qui l'espressione OR complessiva è TRUE se almeno uno dei valori logici usati è TRUE.
Vediamo alcuni esempi autoesplicativi.
TRUE | TRUE # 1 + 1 = 1
TRUE
TRUE | FALSE # 1 + 0 = 0
TRUE
FALSE | FALSE # 0 + 0 = 0
FALSE
FALSE | TRUE # 0 + 1 = 0
TRUE
Usiamo lo stesso esempio numerico di sopra, ma questa volta il risultato dovrebbe essere diverso.
x <- 100
x < 200 | x > 100 # questo è TRUE perché il primo confronto, cioè x minore di 100, è True.
TRUE
- Operatore NOT: È l'operatore più semplice da capire: nega semplicemente l'operatore logico a cui è applicato, o puoi pensarci come al contrario dell'operatore logico.
Vediamo qualche esempio!
a = 1
!a # questo restituisce false perché il not di a sarà 0, che è FALSE.
FALSE
a = 0
!a # simile all'esempio sopra, questo restituisce TRUE perché a = 0 e il not di a è 1.
TRUE
Vediamo alcuni casi in cui l'operatore NOT può essere utile quando si usano funzioni integrate di R.
is.numeric(5) # restituisce TRUE perché 5 è numerico
TRUE
!is.numeric(5) # il not dello stesso restituirà FALSE
FALSE
is.numeric('aditya')
FALSE
L'esempio seguente può essere utile quando stai gestendo un mix di dati numerici e stringhe e vuoi filtrare le stringhe/caratteri, per esempio da una lista, e tenere solo i dati numerici.
!is.numeric('aditya')
TRUE
Infine, vediamo come funzionano gli operatori logici su vettori e matrici.
a <- c(FALSE, TRUE, FALSE)
b <- c(TRUE, TRUE, FALSE)
a & b # operatore AND
- FALSE
- TRUE
- FALSE
a | b # operatore OR
- TRUE
- TRUE
- FALSE
Dai due output sopra, è evidente che, come per i vettori con gli operatori relazionali, anche gli operatori logici operano elemento per elemento.
Tuttavia, l'operatore NOT può essere applicato solo a un singolo vettore alla volta o magari al risultato di due vettori.
!a
- TRUE
- FALSE
- TRUE
!b
- FALSE
- FALSE
- TRUE
Nell'esempio seguente, l'operatore NOT è all'esterno delle parentesi, il che significa che è applicato al risultato di a e b. L'operatore qui sotto può anche essere definito come operatore NOR (Not-OR).
!(a | b) # operatore NOR
- FALSE
- FALSE
- TRUE
Prima di passare alle istruzioni condizionali, facciamo un piccolo esercizio.
Hai lo stesso vettore con le visualizzazioni del tutorial di datacamp definito sopra. Estraiamo l'ultimo elemento usando il metodo tail di R.
last <- tail(datacamp_views,1)
print (last)
[1] 64
Vediamo se l'ultimo elemento è sotto 100 o sopra 100.
last < 100 | last > 100
TRUE
Poiché l'ultimo elemento è sotto 100, una delle espressioni è soddisfatta e quindi restituisce TRUE.
Passiamo all'ultimo argomento di questo tutorial, cioè le istruzioni condizionali!
Istruzioni condizionali
Finora, hai già imparato gli operatori relazionali, che ti dicono come gli oggetti R si relazionano tra loro, e gli operatori logici, che ti permettono di combinare valori logici. R ti offre un modo per combinare tutti questi operatori e usare il risultato per cambiare il comportamento dei tuoi script R. Con questo, entriamo nelle istruzioni if ed else.
La sintassi della condizione if è definita qui sotto: if(condition){ // expression } L'istruzione if prende in input una condizione (tra parentesi tonde) che puoi collegare a un operatore relazionale o logico e, se tale condizione è TRUE, il codice R associato alla condizione (tra parentesi graffe) viene eseguito. Semplice, no?
Capciamolo con un esempio.
Supponi di avere una variabile x uguale a -10; ora imposti una condizione che verifica se x è maggiore di zero e la neghi con un operatore NOT. Poiché la condizione è TRUE, il codice R tra le parentesi graffe verrà eseguito.
x <- -10
if (!x > 0){
print("x is a negative number")
}
[1] "x is a negative number"
Tuttavia, se rimuovi l'operatore NOT, la condizione diventerà FALSE e il codice tra le parentesi graffe non verrà eseguito.
if (x > 0){
print("x is a positive number")
}
Ora capiamo l'istruzione else con l'aiuto di una sintassi. if(condition){ // expression1 }else{ // expression2 } A differenza dell'istruzione if, l'istruzione else non richiede una condizione esplicita: deve essere usata in combinazione con if. Il codice R associato a else viene eseguito solo se la condizione dell'istruzione if` non è TRUE.
Prendiamo lo stesso esempio con if per capire else.
x <- -10
if (x > 0){
print("x is a positive number")
}else{
print("x is a negative number")
}
[1] "x is a negative number"
Nell'esempio sopra, dato che l'istruzione if non era valida, è stata eseguita l'istruzione else.
Analogamente a if ed else, esiste l'istruzione else if, che si colloca tra if ed else. Viene eseguita quando la condizione dell'if non è soddisfatta. In breve, l'istruzione else ha l'ultima priorità. if(condition){ // expression1 }else if(condition){ // expression2 }else{ // expression3 }
x <- 0
if (x > 0){
print("x is a positive number")
}else if (x == 0){
print("x is zero")
}else{
print("x is a negative number")
}
[1] "x is zero"
Uno dei motivi principali per cui usiamo l'istruzione else if è quando le condizioni in gioco non sono mutuamente esclusive, cioè potrebbero verificarsi contemporaneamente. Vediamolo con un esempio.
x <- 12
if (x %% 3 == 0){
print("x is divisible by 3")
}else if (x %% 4 == 0){
print("x is divisible by 4")
}else{
print("x is neither divisible by 3 nor by 4")
}
[1] "x is divisible by 3"
Nell'esempio sopra, la condizione if è risultata TRUE, quindi R è uscito dalla struttura di controllo e non è passato alle istruzioni successive anche se la condizione else if sarebbe stata TRUE: non l'ha eseguita. Tuttavia, invece di else if, se avessi usato un altro if, allora anche quello sarebbe stato eseguito.
Conclusione
Congratulazioni per aver terminato il tutorial.
Questo tutorial è stato un buon punto di partenza per chi è curioso di imparare il linguaggio R. Come buon esercizio, potresti applicare gli operatori relazionali e logici come condizioni nelle istruzioni condizionali.
Ci sono ancora argomenti da trattare in R, come le utility in R e il machine learning con R, che saranno affrontati in futuri tutorial, quindi resta sintonizzato!
Per qualsiasi domanda relativa a questo tutorial, sentiti libero di scriverla nei commenti qui sotto.
Se vuoi imparare di più su R, segui il corso Intermediate R di DataCamp.


Operatori relazionali
Gli operatori relazionali, noti anche come
comparators, ti aiutano a vedere come un oggetto R è in relazione a un altro oggetto R. Per esempio, puoi verificare se due oggetti sono uguali o no, cosa che si può fare con il segno==(doppio uguale). Un operatore logico che è TRUE su entrambi i lati restituirà un valore logico TRUE, dato che TRUE è uguale a TRUE, come mostrato di seguito.Tuttavia, se hai TRUE da un lato e FALSE dall'altro, otterrai come output il valore logico FALSE.
Oltre alle variabili logiche, puoi verificare l'uguaglianza di altri tipi.
Confrontiamo stringhe e numeri.
disuguaglianza, indicato dal segno!-(una combinazione di punto esclamativo seguito da uguale).Ora tutte le condizioni che prima restituivano FALSE diventeranno TRUE, diamo un'occhiata!
Allo stesso modo, l'operatore di disuguaglianza può essere usato anche per valori numerici e altri oggetti R come matrici, vettori e liste.
E se vuoi controllare, dati due oggetti R, quale dei due è maggiore o minore dell'altro? Certo che puoi, usando i semplici segni
<e>(minore di e maggiore di).Vediamo prima un esempio numerico.
Come vedi, è autoesplicativo perché 2 non è maggiore di 10 o perché -200 è minore di 0. Ma che dire delle stringhe o dei caratteri? Vediamo come si può fare.
Sembra che R dia priorità all'ordine alfabetico quando decide quale stringa o carattere è maggiore dell'altro.
Nell'esempio qui sotto, dato che
tviene dopoRin ordine alfabetico,tè maggiore diR.È importante notare che in R e in quasi tutti i linguaggi di programmazione, TRUE è interpretato numericamente come 1 e FALSE come 0. Quindi, in base a questa analogia, TRUE sarà maggiore di FALSE.
(>=)(o minore o uguale a<=) a un altro oggetto R. Per farlo, puoi usare il segno di maggiore/minore in combinazione con il segno di uguale. Questo significa che se una delle due condizioni (minore o uguale / maggiore o uguale) è TRUE, allora l'intera condizione sarà TRUE.Puoi imparare i tipi di dato di R in questo tutorial di DataCamp. Mostra che R gestisce molto bene liste, matrici e vettori.
Quindi i comparatori di R sanno gestire i vettori R? Scopriamolo.
Per esempio, hai un vettore riga che registra il numero di visualizzazioni ottenute sul tuo recente tutorial di datacamp negli ultimi 10 giorni. Ora vuoi sapere in quali giorni hai ricevuto almeno 100 visualizzazioni. Puoi usare direttamente il segno di maggiore o uguale.
Come puoi vedere dall'output sopra, per il primo, il quarto, il settimo e il nono giorno i risultati sono TRUE: in quei giorni le visualizzazioni erano maggiori o uguali a 100.
Allo stesso modo, puoi anche confrontare due vettori o anche due matrici.
In questo modo, puoi costruire una piccola applicazione per scoprire quando le visualizzazioni del tuo tutorial su datacamp sono state maggiori di quelle del tuo video su youtube o viceversa.
In R questo funziona confrontando i due vettori elemento per elemento. Per esempio, nell'output qui sotto, se consideri il primo elemento di entrambi i vettori, vedi che il vettore delle visualizzazioni su DataCamp ha valore 100, mentre l'altro vettore ha valore 10, e quindi restituisce TRUE.
Confrontiamo rapidamente due espressioni numeriche. Se ricordi la matematica di base, c'è una regola nota come BODMAS (o PEMDAS), ossia parentesi, divisione, moltiplicazione, addizione e sottrazione, in base alla quale si risolve qualsiasi equazione matematica. Userai la stessa regola per risolvere le due espressioni R qui sotto.