Vai al contenuto principale

Tipi di dati in R

Scopri i tipi di dati e la loro importanza in un linguaggio di programmazione. In particolare, impara a usare vari tipi di dati come vettori, matrici, liste e data frame nel linguaggio R.
Aggiornato 29 set 2026  · 12 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

diagramma delle strutture dati in r

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.

sessione r

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:

kernel r

Ora sei pronto per scrivere il tuo primo codice R su jupyter notebook.

Introduzione

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:

Capiremo prima alcuni dei tipi di dati di base su cui sono costruiti gli oggetti R, come Numeric, Integer, Character, Factor e Logical.

  • Numeric: I numeri che hanno un valore decimale o sono frazioni hanno tipo di dato numeric.
num <- 1.2
print(num)
[1] 1.2

Puoi controllare il tipo di dato di a usando la parola chiave class().

class(num)
'numeric'
  • Integer: I numeri che non contengono valori decimali hanno tipo di dato integer. Tuttavia, per creare un intero, usa esplicitamente as.integer() e passa la variabile come argomento.
int <- as.integer(2.2)
print(int)
[1] 2
class(int)
'integer'
  • Character: Come suggerisce il nome, può essere una lettera o una combinazione di lettere racchiuse tra virgolette: R le considera di tipo character. Possono essere alfabeti o numeri.
char <- "datacamp"
print(char)
[1] "datacamp"
class(char)
'character'
char <- "12345"
print(char)
[1] "12345"
class(char)
'character'
  • Logical: Una variabile che può avere valore True o False, come un booleano, è detta variabile logical.
log_true <- TRUE
print(log_true)
[1] TRUE
class(log_true)
'logical'
log_false <- FALSE
print(log_false)
[1] FALSE
class(log_false)
'logical'
  • Factor: Sono un tipo di dato usato per rappresentare una relazione qualitativa come colori, buono & cattivo, valutazioni di corsi o film, ecc. Sono utili nella modellazione statistica.

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)
  1. 'bad'
  2. 'good'
  3. 'ugly'
nlevels(fac)
3
class(levels(fac))
'character'

Prima di andare avanti, vediamo un paio di consigli importanti che possono tornare utili!

  • Ricorda sempre che il linguaggio R è case-sensitive. Tutti gli oggetti definiti sopra devono essere usati nello stesso modo, maiuscolo o minuscolo, come mostrato nell'esempio sotto.
Num
Error in eval(expr, envir, enclos): object 'Num' not found
Traceback:
  • In R puoi controllare tutte le variabili o gli oggetti che hai definito nell'ambiente di lavoro usando la parola chiave ls(), come mostrato sotto.
ls()
  1. 'char'
  2. 'int'
  3. 'num'

Liste

Indicizzazione delle liste in Python
(Fonte)

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
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
lis2 <- factor(1:5)  # Factor Vector
lis2
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
Livelli:
  1. '1'
  2. '2'
  3. '3'
  4. '4'
  5. '5'
lis3 <- letters[1:5]  # Character Vector
lis3
  1. 'a'
  2. 'b'
  3. 'c'
  4. 'd'
  5. 'e'
combined_list <- list(lis1, lis2, lis3)
combined_list
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
  1. Livelli:
    1. '1'
    2. '2'
    3. '3'
    4. '4'
    5. '5'
    1. 'a'
    2. 'b'
    3. 'c'
    4. 'd'
    5. 'e'

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

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

python combined_list[[2]]

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
Livelli:
  1. '1'
  2. '2'
  3. '3'
  4. '4'
  5. '5'
combined_list[[3]]
  1. 'a'
  2. 'b'
  3. 'c'
  4. 'd'
  5. 'e'

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
  1. '1'
  2. '2'
  3. '3'
  4. '4'
  5. '5'
  6. '1'
  7. '2'
  8. '3'
  9. '4'
  10. '5'
  11. 'a'
  12. 'b'
  13. 'c'
  14. 'd'
  15. 'e'
length(flat_list)
15

Vettori

vettore matrice
(Fonte)

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]
  1. 65
  2. 90
  3. 40
  4. 65

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]
  1. 'a'
  2. 'b'
  3. 'c'

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
  1. '1'
  2. '2'
  3. 'a'
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
  • Come si crea un vettore di numeri dispari?

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)
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9

Matrice

matrice in r
(Fonte)

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
Una matrice: 2 × 2 di tipo chr
AI ML
Tensorflow Pytorch

DataFrame

data frame
(Fonte)

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
Un data.frame: 6 × 5
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
Un data.frame: 3 × 10
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
Un data.frame: 3 × 5
  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  

Conclusione

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.

Argomenti
R
Data Science

Scopri di più su R

Corso

Introduzione a R

4 ore
3.1M
Impara le basi dell'analisi dei dati in R, compresi vettori, liste e data frame, e fai pratica con R con set di dati reali.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro