Last chance! 50% off DataCamp Premium
Sale ends in

Prima di iniziare con l'introduzione e conoscere i vari tipi di dati in R, configuriamo rapidamente l'ambiente R sia sul Terminale che su Jupyter Notebook.
Il seguente comando è per il sistema operativo Mac e installerà R sul tuo terminale.
brew install r --build-from-source
Per verificare che l'installazione sia andata a buon fine, digita semplicemente R (maiuscolo) nel terminale: entrerai in una sessione R, come mostrato sotto.

Per l'installazione su altri sistemi operativi, dai un'occhiata a questo tutorial.
Ora aggiungiamo il linguaggio di programmazione R come kernel su jupyter notebook. Assicurati di avere già installato jupyter notebook sul tuo sistema.
Vai al terminale, apri la sessione R ed esegui i due comandi qui sotto: aggiungeranno il kernel R al tuo jupyter notebook.
install.packages('IRkernel')
IRkernel::installspec()
Una volta che i due comandi sopra sono andati a buon fine, avvia jupyter dal terminale e apri un notebook con kernel R come mostrato sotto:

Ora sei pronto per scrivere il tuo primo codice R su jupyter notebook.
Per sfruttare al massimo R, è molto importante conoscere e comprendere i vari tipi di dati e le strutture dati presenti in R e come funzionano. Giocano un ruolo chiave in quasi tutti i problemi, soprattutto quando lavori su problemi di machine learning, molto incentrati sui dati.
In un linguaggio di programmazione, di solito abbiamo bisogno di variabili per memorizzare informazioni, che possono essere interi, caratteri, numeri in virgola mobile, booleani, ecc. Il tipo della variabile dipende esclusivamente dal tipo di informazione che contiene. Se le viene assegnato un intero, allora la variabile ha tipo di dato int. Le variabili sono semplicemente posizioni di memoria riservate in cui sono memorizzati i valori. Non appena crei una variabile, le viene riservato dello spazio di memoria.
In base al tipo di dato di una variabile, il sistema operativo alloca una certa memoria. Ad esempio, in R una variabile che contiene un intero riserva 4 byte di memoria e 1 byte per un carattere.
Nei linguaggi di programmazione come C, C++ e Java, le variabili sono dichiarate come tipo di dato; in Python e R, invece, le variabili sono oggetti. Gli oggetti non sono altro che strutture dati con alcuni attributi e metodi applicati ai loro attributi.
Esistono vari tipi di oggetti R o strutture dati che verranno trattati in questo tutorial, come:
Vettori
Liste
Matrici
Array
Fattori
Capiremo prima alcuni dei tipi di dati di base su cui sono costruiti gli oggetti R, come Numeric, Integer, Character, Factor e Logical.
num <- 1.2
print(num)
[1] 1.2
Puoi controllare il tipo di dato di a usando la parola chiave class().
class(num)
'numeric'
as.integer() e passa la variabile come argomento.int <- as.integer(2.2)
print(int)
[1] 2
class(int)
'integer'
char <- "datacamp"
print(char)
[1] "datacamp"
class(char)
'character'
char <- "12345"
print(char)
[1] "12345"
class(char)
'character'
log_true <- TRUE
print(log_true)
[1] TRUE
class(log_true)
'logical'
log_false <- FALSE
print(log_false)
[1] FALSE
class(log_false)
'logical'
Per farlo, userai la funzione c(), che restituisce un vettore (monodimensionale) combinando tutti gli elementi.
fac <- factor(c("good", "bad", "ugly","good", "bad", "ugly"))
print(fac)
[1] good bad ugly good bad ugly
Levels: bad good ugly
class(fac)
'factor'
Il fattore fac ha tre livelli: good, bad e ugly, che possono essere verificati con la parola chiave levels; il tipo dei livelli sarà character.
levels(fac)
nlevels(fac)
3
class(levels(fac))
'character'
Prima di andare avanti, vediamo un paio di consigli importanti che possono tornare utili!
Num
Error in eval(expr, envir, enclos): object 'Num' not found
Traceback:
ls(), come mostrato sotto.ls()
A differenza dei vettori, una lista può contenere elementi di vari tipi di dato ed è spesso definita come una collezione ordinata di valori. Può contenere vettori, funzioni, matrici e persino un'altra lista al suo interno (lista annidata).
Le liste in R sono indicizzate a partire da uno, cioè l'indice inizia da uno.
Comprendiamo il concetto di liste con un rapido esempio che avrà tre diversi tipi di dato memorizzati in un'unica lista.
lis1 <- 1:5 # Integer Vector
lis1
lis2 <- factor(1:5) # Factor Vector
lis2
lis3 <- letters[1:5] # Character Vector
lis3
combined_list <- list(lis1, lis2, lis3)
combined_list
Accediamo ora a ciascun vettore nella lista separatamente. Per farlo, userai le doppie parentesi quadre dato che i tre vettori sono allo stesso livello all'interno della lista. python
combined_list[[1]]
python
combined_list[[2]]
combined_list[[3]]
Ora proviamo ad accedere al quinto elemento del terzo vettore, che restituisce la lettera e.
combined_list[[3]][5]
'e'
Infine, proviamo ad appiattire la lista. Una cosa importante da ricordare è che poiché combined_list è una combinazione di datatype character e numeric, il tipo character avrà la precedenza e il tipo di dato dell'intera lista diventerà character.
flat_list <- unlist(combined_list)
class(flat_list)
'character'
flat_list
length(flat_list)
15
I vettori sono oggetti usati per memorizzare più informazioni o valori dello stesso tipo di dato. Un vettore non può avere una combinazione di interi e caratteri. Ad esempio, se vuoi memorizzare il totale dei voti di 100 studenti, invece di creare 100 variabili diverse per ciascuno studente, creeresti un vettore di lunghezza 100 che conterrà tutti i voti.
Un vettore può essere creato con la funzione c(), che combina tutti gli elementi e restituisce un array monodimensionale.
Creiamo un vettore marks con i dati di cinque studenti di classe numeric.
marks <- c(88,65,90,40,65)
class(marks)
'numeric'
Controlliamo la lunghezza del vettore, che dovrebbe restituire il numero di elementi contenuti.
length(marks)
5
Ora proviamo ad accedere a un elemento specifico tramite il suo indice.
marks[4]
40
marks[5]
65
marks[6] #restituisce NA perché non c'è un sesto elemento nel vettore
<NA>
Slicing: Come in Python, anche in R si può applicare il concetto di slicing.
Proviamo ad accedere agli elementi dal secondo al quinto usando lo slicing.
marks[2:5]
Creiamo ora un vettore di tipo character, in modo analogo alla creazione di un vettore numerico.
char_vector <- c("a", "b", "c")
print(char_vector)
[1] "a" "b" "c"
class(char_vector)
'character'
length(char_vector)
3
char_vector[1:3]
Se creiamo un vettore che contiene sia valori numerici che caratteri, i valori numerici verranno convertiti in tipo di dato character.
char_num_vec <- c(1,2, "a")
char_num_vec
class(char_num_vec)
'character'
Creiamo un vettore con 1024 valori numerici con l'aiuto dello slicing.
vec <- c(1:1024)
Ora prova ad accedere all'elemento centrale e all'ultimo. Per farlo, userai la funzione length.
vec[length(vec)]
1024
vec[length(vec)/2]
512
Per creare un vettore di numeri dispari, puoi usare la funzione seq, che accetta tre parametri: inizio, fine e passo.
seq(1,10, by = 2)
Come un vettore, una matrice è usata per memorizzare informazioni dello stesso tipo di dato. Tuttavia, a differenza dei vettori, le matrici possono contenere informazioni bidimensionali.
La sintassi per definire una matrice è:
M <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_vector_rownames, char_vector_colnames))
byrow=TRUE indica che la matrice deve essere riempita per righe. byrow=FALSE indica che la matrice deve essere riempita per colonne (predefinito).
Definiamo rapidamente una matrice M di forma $2\times3$.
M = matrix( c('AI','ML','DL','Tensorflow','Pytorch','Keras'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
[,1] [,2] [,3]
[1,] "AI" "ML" "DL"
[2,] "Tensorflow" "Pytorch" "Keras"
Usiamo lo slicing e recuperiamo elementi per riga e colonna.
M[1:2,1:2] #la prima dimensione seleziona entrambe le righe mentre la seconda dimensione selezionerà
#elementi dalla 1a e 2a colonna
| AI | ML |
| Tensorflow | Pytorch |
A differenza di una matrice, i data frame sono una forma più generalizzata di matrice. Contengono dati in forma tabellare. I dati nel data frame possono essere distribuiti su varie colonne con tipi di dato diversi. La prima colonna può essere di tipo character, la seconda integer e la terza logical.
Le variabili o feature sono in forma colonnare, anche note come intestazione, mentre le osservazioni sono nelle righe, con il primo elemento che è il nome della riga seguito dai dati effettivi, anche noti come righe di dati.
Un DataFrame può essere creato usando la funzione data.frame().
I DataFrame sono ampiamente usati per leggere file separati da virgole (CSV) e file di testo. Il loro uso non si limita alla lettura dei dati: puoi anche usarli per problemi di machine learning, soprattutto quando tratti dati numerici. I DataFrame sono utili per comprendere i dati, fare data wrangling, creare grafici e visualizzare.
Creiamo un dataset di esempio e impariamo alcune funzioni specifiche dei data frame.
dataset <- data.frame(
Person = c("Aditya", "Ayush","Akshay"),
Age = c(26, 26, 27),
Weight = c(81,85, 90),
Height = c(6,5.8,6.2),
Salary = c(50000, 80000, 100000)
)
print(dataset)
Person Age Weight Height Salary
1 Aditya 26 81 6.0 5e+04
2 Ayush 26 85 5.8 8e+04
3 Akshay 27 90 6.2 1e+05
class(dataset)
'data.frame'
nrow(dataset) # questo ti darà il numero di righe presenti nel data frame dataset
3
ncol(dataset) # questo ti darà il numero di colonne presenti nel data frame dataset
5
df1 = rbind(dataset, dataset) # un bind per righe che accoda gli argomenti in modo riga.
df1
| Person | Age | Weight | Height | Salary |
|---|---|---|---|---|
| <fct> | <dbl> | <dbl> | <dbl> | <dbl> |
| Aditya | 26 | 81 | 6.0 | 5e+04 |
| Ayush | 26 | 85 | 5.8 | 8e+04 |
| Akshay | 27 | 90 | 6.2 | 1e+05 |
| Aditya | 26 | 81 | 6.0 | 5e+04 |
| Ayush | 26 | 85 | 5.8 | 8e+04 |
| Akshay | 27 | 90 | 6.2 | 1e+05 |
df2 = cbind(dataset, dataset) # un bind per colonne che accoda gli argomenti in modo colonna.
df2
| Person | Age | Weight | Height | Salary | Person | Age | Weight | Height | Salary |
|---|---|---|---|---|---|---|---|---|---|
| <fct> | <dbl> | <dbl> | <dbl> | <dbl> | <fct> | <dbl> | <dbl> | <dbl> | <dbl> |
| Aditya | 26 | 81 | 6.0 | 5e+04 | Aditya | 26 | 81 | 6.0 | 5e+04 |
| Ayush | 26 | 85 | 5.8 | 8e+04 | Ayush | 26 | 85 | 5.8 | 8e+04 |
| Akshay | 27 | 90 | 6.2 | 1e+05 | Akshay | 27 | 90 | 6.2 | 1e+05 |
Vediamo la funzione head, molto utile quando hai milioni di record e vuoi vedere solo le prime righe dei tuoi dati. Allo stesso modo, la funzione tail stamperà le ultime righe dei tuoi dati.
head(df1,3) # qui verranno stampate solo tre righe
| Person | Age | Weight | Height | Salary | |
|---|---|---|---|---|---|
| <fct> | <dbl> | <dbl> | <dbl> | <dbl> | |
| 1 | Aditya | 26 | 81 | 6.0 | 5e+04 |
| 2 | Ayush | 26 | 85 | 5.8 | 8e+04 |
| 3 | Akshay | 27 | 90 | 6.2 | 1e+05 |
str(dataset) #restituisce la classe o le informazioni sul tipo di dato per ciascuna colonna.
'data.frame': 3 obs. of 5 variables:
$ Person: Factor w/ 3 levels "Aditya","Akshay",..: 1 3 2
$ Age : num 26 26 27
$ Weight: num 81 85 90
$ Height: num 6 5.8 6.2
$ Salary: num 5e+04 8e+04 1e+05
Ora vediamo la funzione summary(), utile quando vuoi comprendere le statistiche del tuo dataset. Come mostrato sotto, divide i dati in tre quartili, in base ai quali puoi farti un'idea della distribuzione. Mostra anche se ci sono valori mancanti nel dataset.
summary(dataset)
Person Age Weight Height Salary
Aditya:1 Min. :26.00 Min. :81.00 Min. :5.8 Min. : 50000
Akshay:1 1st Qu.:26.00 1st Qu.:83.00 1st Qu.:5.9 1st Qu.: 65000
Ayush :1 Median :26.00 Median :85.00 Median :6.0 Median : 80000
Mean :26.33 Mean :85.33 Mean :6.0 Mean : 76667
3rd Qu.:26.50 3rd Qu.:87.50 3rd Qu.:6.1 3rd Qu.: 90000
Max. :27.00 Max. :90.00 Max. :6.2 Max. :100000
Congratulazioni per aver completato il tutorial.
Questo tutorial è un buon punto di partenza per chi è curioso di imparare il linguaggio R. Come esercizio, sentiti libero di esplorare altre funzioni di supporto relative a ciascun tipo di dato.
C'è ancora molta informazione su R da scoprire, come Condizionali e controllo di flusso in R, Utility in R e, la più entusiasmante, il Machine Learning con R: saranno trattati nei prossimi tutorial, quindi rimani sintonizzato!
Per qualsiasi domanda relativa a questo tutorial, usa pure la sezione commenti qui sotto.
Se vuoi imparare di più su R, segui il corso di DataCamp Intermediate R e dai un'occhiata al tutorial Introduzione ai data frame in R.
Scopri di più su R
Corso
Corso
Corso
blog
Tim Lu
12 min

blog
Abid Ali Awan
10 min

blog
Abid Ali Awan
15 min