📊 Introduzione a R

Guida Completa al Linguaggio di Programmazione per Analisi Statistica e Data Science

📖 1. Cos'è R?

R è un linguaggio di programmazione open source e un ambiente software per il calcolo statistico e la visualizzazione grafica. È stato creato nel 1993 dai professori Ross Ihaka e Robert Gentleman presso l'Università di Auckland come strumento didattico per l'insegnamento della statistica introduttiva.

🎯 Curiosità sul Nome

Il nome "R" deriva da due fonti: è il successore del linguaggio S (sviluppato nei Bell Labs) e rappresenta la prima lettera dei nomi dei suoi creatori, Ross e Robert.

Storia e Sviluppo

Il Comprehensive R Archive Network (CRAN) è stato fondato nel 1997 da Kurt Hornik e Fritz Leisch per ospitare il codice sorgente di R, i file eseguibili, la documentazione e i pacchetti creati dagli utenti. Inizialmente CRAN aveva 3 mirror e 12 pacchetti. A dicembre 2022, conta 103 mirror e oltre 18.976 pacchetti!

Il R Core Team è stato formato nel 1997 per continuare lo sviluppo del linguaggio e oggi R è utilizzato da milioni di utenti in tutto il mondo per analisi statistiche, data science, machine learning e ricerca scientifica.

⚡ 2. Punti di Forza e Debolezze di R

Punti di Forza

✅ Vantaggi Principali
  • Vasta gamma di funzioni: R offre migliaia di pacchetti che permettono di eseguire praticamente qualsiasi tipo di analisi statistica, dal più semplice al più complesso.
  • Open source: R è completamente gratuito e il codice sorgente è accessibile a tutti, permettendo trasparenza e personalizzazione.
  • Comunità attiva: R ha una comunità vasta e attiva di utenti e sviluppatori che forniscono supporto, risorse, tutorial e documentazione costantemente aggiornata.
  • Altamente personalizzabile: Puoi creare strumenti di analisi e visualizzazione completamente personalizzati per le tue esigenze specifiche.
  • Visualizzazioni eccellenti: Pacchetti come ggplot2 permettono di creare grafici professionali e pubblicabili con poche righe di codice.

Debolezze

⚠️ Limitazioni da Considerare
  • Interfaccia poco intuitiva: L'interfaccia utente può risultare meno user-friendly rispetto ad altri software di analisi dati come SAS o SPSS, specialmente per chi è alle prime armi.
  • Performance: Essendo un linguaggio interpretato, R può essere più lento nell'esecuzione di alcune operazioni rispetto ad altri linguaggi di programmazione compilati.
  • Gestione memoria: La gestione della memoria di R può essere inefficiente con dataset molto grandi (multi-gigabyte), richiedendo ottimizzazioni specifiche.
  • Documentazione variabile: Mentre molti pacchetti hanno documentazione eccellente, alcuni possono avere documentazione incompleta o poco chiara.

🎯 3. Usi Tipici di R

R è uno strumento estremamente versatile utilizzato in molteplici ambiti professionali e di ricerca:

📦 4. Pacchetti R

Un pacchetto R è una collezione di funzioni, dataset e documentazione che estende le funzionalità base del linguaggio. I pacchetti sono il cuore dell'ecosistema R e permettono di accedere a strumenti specializzati per ogni tipo di analisi.

Pacchetti Fondamentali

📚 Pacchetti Più Importanti e Popolari
  • ggplot2: Per la visualizzazione dei dati con una grammatica elegante e flessibile.
  • dplyr: Per la manipolazione dei dati (filtri, raggruppamenti, riassunti).
  • tidyr: Per la pulizia e la ristrutturazione dei dati.
  • caret: Per il machine learning e la creazione di modelli predittivi.
  • lubridate: Per lavorare con date e orari.
  • stringr: Per manipolazione di stringhe e pattern matching.
  • data.table: Per manipolazione e aggregazione veloce di grandi dataset.
  • shiny: Per creare applicazioni web interattive.

Installazione e Utilizzo dei Pacchetti

Per installare e utilizzare un pacchetto in R, usa i seguenti comandi:

# Installare un pacchetto da CRAN install.packages("ggplot2") # Caricare un pacchetto per usarlo nella sessione corrente library(ggplot2) # Installare più pacchetti contemporaneamente install.packages(c("dplyr", "tidyr", "ggplot2"))

Repository di Pacchetti

CRAN (Comprehensive R Archive Network)

CRAN è il repository principale per i pacchetti R. I pacchetti su CRAN sono contribuiti da utenti e sviluppatori R di tutto il mondo e subiscono un rigoroso processo di revisione prima dell'accettazione, garantendo qualità e affidabilità.

Bioconductor

Bioconductor è una collezione di pacchetti R specificamente progettati per l'analisi e l'interpretazione di dati genomici. Include strumenti per analisi di espressione genica, sequenziamento DNA, dati microarray e molto altro.

# Installare Bioconductor if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") # Installare un pacchetto da Bioconductor BiocManager::install("DESeq2")

GitHub

Anche se non è specificamente progettato per pacchetti R, GitHub è una piattaforma popolare per condividere e collaborare su codice, inclusi pacchetti R in fase di sviluppo o sperimentali.

💻 5. Download e Installazione di R

Seguire questi semplici passaggi per installare R sul proprio computer:

  1. Andare sul sito ufficiale di R: https://www.r-project.org/
  2. Cliccare sul link "CRAN" nella barra laterale sinistra.
  3. Scegliere un mirror CRAN vicino alla propria posizione (ad esempio, Padova per l'Italia).
  4. Cliccare sul link per scaricare la versione appropriata per il proprio sistema operativo (Windows, Mac, o Linux).
  5. Seguire le istruzioni di installazione specifiche per il sistema operativo.
  6. Una volta installato, lanciare R facendo doppio click sull'icona R sul desktop, oppure digitando "R" nel terminale/prompt dei comandi.
💡 Suggerimento

R è disponibile anche nei repository di molte distribuzioni Linux. Puoi controllare il sistema di gestione pacchetti della tua distribuzione prima di scaricare da CRAN.

🎨 6. RStudio - L'IDE per R

RStudio è un Integrated Development Environment (IDE) per R e Python. Include una console, un editor di testo con syntax highlighting che supporta l'esecuzione diretta del codice, e strumenti per plotting, history, debugging e gestione del workspace.

Perché Usare RStudio?

✨ Vantaggi di RStudio
  • Interfaccia intuitiva e ben organizzata
  • Editor di codice avanzato con autocompletamento
  • Visualizzazione immediata di grafici e risultati
  • Gestione integrata di progetti
  • Supporto per R Markdown e creazione di report
  • Debugging e profiling integrati
  • Integrazione con Git per version control

Download e Installazione di RStudio

  1. Assicurarsi di aver installato R prima di installare RStudio.
  2. Andare sul sito ufficiale: posit.co/download/rstudio-desktop/
  3. Scaricare la versione appropriata per il proprio sistema operativo.
  4. Seguire le istruzioni di installazione.
  5. Lanciare RStudio facendo doppio click sull'icona di RStudio.

Interfaccia di RStudio

L'interfaccia di RStudio è divisa in quattro pannelli principali:

🖥️ I Quattro Pannelli di RStudio
  • Editor (in alto a sinistra): Dove scrivi e modifichi i tuoi script .R e file .Rmd.
  • Console (in basso a sinistra): Dove puoi interagire con R digitando comandi e vedendo il loro output. Qui appare anche la cronologia dei comandi.
  • Environment/History (in alto a destra): Mostra le variabili e gli oggetti nel tuo ambiente R corrente, insieme alla cronologia dei comandi.
  • Files/Plots/Packages/Help (in basso a destra): Permette di navigare tra i file del progetto, visualizzare grafici, gestire pacchetti e accedere alla documentazione.

Personalizzazione di RStudio

RStudio offre molte opzioni di personalizzazione per migliorare l'esperienza di programmazione:

📝 7. I Tuoi Primi Comandi in R

Puoi eseguire comandi direttamente nella console di R o scriverli in un file .R script.

Operazioni Matematiche Base

# Addizione 2 + 3
[1] 5
# Sottrazione 10 - 4
[1] 6
# Moltiplicazione 5 * 6
[1] 30
# Divisione 20 / 4
[1] 5
# Potenza 2 ^ 3
[1] 8
# Modulo (resto della divisione) 17 %% 5
[1] 2

Dichiarazione di Variabili

In R, puoi dichiarare variabili usando gli operatori <- o =. La convenzione più comune è usare <-.

# Dichiarare una variabile x <- 42 y <- 10 # Usare le variabili somma <- x + y somma
[1] 52
# Anche l'operatore = funziona nome = "Mario" print(nome)
[1] "Mario"
💡 Best Practice per i Nomi delle Variabili
  • I nomi devono iniziare con una lettera.
  • Possono contenere lettere, numeri e underscore (_).
  • R è case-sensitive: variabileVariabile
  • Evita nomi come: i, j, pi, true, false, e nomi di funzioni built-in.
  • Usa nomi descrittivi: età_studente è meglio di x
  • Convenzioni comuni: snake_case, camelCase, o PascalCase

📊 8. Variabili e Strutture Dati in R

Vettori

Un vettore è una lista ordinata di elementi dello stesso tipo. È la struttura dati fondamentale in R.

# Creare un vettore numerico v1 <- c(2, 5, 1, 8, 3) v1
[1] 2 5 1 8 3
# Accedere agli elementi (l'indice inizia da 1!) v1[1]
[1] 2
v1[3]
[1] 1
# Accedere a più elementi v1[c(1, 3, 5)]
[1] 2 1 3
# Creare un vettore di caratteri nomi <- c("Alice", "Bob", "Charlie") # Concatenare vettori v2 <- c(4, 10) v3 <- c(v1, v2) v3
[1] 2 5 1 8 3 4 10

Sequenze

R offre modi efficienti per creare sequenze di numeri:

# Operatore colon : crea sequenze di interi x1 <- 1:10 x1
[1] 1 2 3 4 5 6 7 8 9 10
# Funzione seq() per sequenze più complesse x2 <- seq(from = 0, to = 1, by = 0.2) x2
[1] 0.0 0.2 0.4 0.6 0.8 1.0
# Sequenza con numero specifico di elementi x3 <- seq(from = 0, to = 1, length.out = 5) x3
[1] 0.00 0.25 0.50 0.75 1.00
# Ripetizioni r1 <- rep(c(1, 2, 3), times = 3) r1
[1] 1 2 3 1 2 3 1 2 3
r2 <- rep(c(1, 2, 3), each = 3) r2
[1] 1 1 1 2 2 2 3 3 3

Funzioni Utili per Vettori

Funzione Descrizione
length() Restituisce la lunghezza del vettore
max(), min() Calcola il massimo o il minimo
sum() Somma tutti gli elementi
mean() Calcola la media
median() Calcola la mediana
sd() Calcola la deviazione standard
cumsum() Calcola la somma cumulativa
sort() Ordina gli elementi

Matrici

Una matrice è una struttura bidimensionale che contiene elementi dello stesso tipo, organizzati in righe e colonne.

# Creare una matrice usando matrix() mat1 <- matrix(data = c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3) mat1
[,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
# Creare una matrice usando cbind() (concatena per colonne) mat2 <- cbind(c(1, 2, 3), c(4, 5, 6)) mat2
[,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6
# Creare una matrice usando rbind() (concatena per righe) mat3 <- rbind(c(1, 2, 3), c(4, 5, 6)) mat3
[,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
# Accedere agli elementi: matrice[riga, colonna] mat1[2, 2]
[1] 4
# Accedere a un'intera riga mat1[1, ]
[1] 1 3 5
# Accedere a un'intera colonna mat1[, 2]
[1] 3 4

Matrici Speciali

# Matrice di zeri mat_zero <- matrix(0, nrow = 3, ncol = 3) # Matrice di uni mat_ones <- matrix(1, nrow = 3, ncol = 3) # Matrice identità mat_id <- diag(3) mat_id
[,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1

Operazioni con Matrici

# Operazioni element-wise A <- matrix(1:9, nrow = 3) B <- A + 1 # Moltiplicazione matriciale (algebra lineare) v1 <- c(1, 2, 3) v2 <- c(4, 5, 6) # Prodotto scalare t(v1) %*% v2
[,1] [1,] 32
# Prodotto esterno v1 %*% t(v2)
[,1] [,2] [,3] [1,] 4 5 6 [2,] 8 10 12 [3,] 12 15 18
# Trasposta t(A) # Determinante det(A) # Inversa A_inv <- solve(A)

Liste

Le liste sono strutture dati flessibili che possono contenere elementi di tipi diversi.

# Creare una lista l1 <- list( nome = "Alice", età = 25, voti = c(28, 30, 27), superato = TRUE ) # Accedere agli elementi l1[[1]]
[1] "Alice"
l1$nome
[1] "Alice"
l1$voti
[1] 28 30 27

Data Frame

Un data frame è una struttura tabellare bidimensionale simile a una tabella di database o a un foglio Excel. È la struttura più comune per lavorare con dati in R.

# Creare un data frame df1 <- data.frame( nome = c("Alice", "Bob", "Charlie"), età = c(25, 30, 35), voto = c(28, 30, 27) ) df1
nome età voto 1 Alice 25 28 2 Bob 30 30 3 Charlie 35 27
# Accedere a una colonna df1$nome
[1] "Alice" "Bob" "Charlie"
df1[, "età"]
[1] 25 30 35
# Accedere a una riga df1[2, ]
nome età voto 2 Bob 30 30
# Aggiungere una nuova colonna df1$superato <- df1$voto >= 27 # Funzioni utili nrow(df1) # numero di righe ncol(df1) # numero di colonne dim(df1) # dimensioni head(df1) # prime righe tail(df1) # ultime righe str(df1) # struttura del data frame summary(df1) # statistiche riassuntive

Fattori

I fattori sono usati per rappresentare variabili categoriche. Sono utili per analisi statistiche e visualizzazioni.

# Creare un fattore stato_civile <- factor(c("sposato", "single", "single", "divorziato", "sposato")) stato_civile
[1] sposato single single divorziato sposato Levels: divorziato single sposato
# Vedere i livelli levels(stato_civile)
[1] "divorziato" "single" "sposato"
# I fattori possono contenere solo i livelli predefiniti stato_civile[1] <- "test"
Warning message: invalid factor level, NA generated

🔄 9. Strutture di Controllo

If-Else

# Struttura if-else x <- 10 if (x > 5) { print("x è maggiore di 5") } else if (x == 5) { print("x è uguale a 5") } else { print("x è minore di 5") } # Versione vettorizzata: ifelse() voti <- c(28, 18, 30, 25, 16) risultato <- ifelse(voti >= 18, "Promosso", "Bocciato") risultato
[1] "Promosso" "Promosso" "Promosso" "Promosso" "Bocciato"

Ciclo For

# Ciclo for classico for (i in 1:5) { print(paste("Iterazione", i)) } # Ciclo for su un vettore frutta <- c("mela", "banana", "arancia") for (f in frutta) { print(paste("Mi piace la", f)) } # Esempio pratico: calcolare somma cumulativa numeri <- c(2, 5, 8, 3) somma <- 0 for (n in numeri) { somma <- somma + n print(paste("Somma parziale:", somma)) }

Ciclo While

# Ciclo while contatore <- 1 while (contatore <= 5) { print(paste("Contatore:", contatore)) contatore <- contatore + 1 } # Esempio con condizione complessa x <- 100 while (x > 10) { x <- x / 2 print(paste("x =", x)) }
⚠️ Nota sui Loop in R

In R, quando possibile, è preferibile usare funzioni vettorizzate invece di loop espliciti, perché sono più veloci ed efficienti. Ad esempio, invece di usare un loop per sommare elementi, usa sum().

📈 10. Visualizzazione Dati

R è famoso per le sue capacità di visualizzazione dati. La funzione base plot() è molto flessibile, ma esistono anche pacchetti specializzati come ggplot2 per grafici più avanzati.

Scatter Plot

# Dati di esempio x <- c(1, 2, 3, 4, 5) y <- c(2, 4, 6, 8, 10) # Scatter plot semplice plot(x, y) # Scatter plot personalizzato plot(x, y, main = "Relazione tra X e Y", xlab = "Valori X", ylab = "Valori Y", col = "blue", pch = 19, cex = 2)

Line Plot

# Generare 100 valori casuali reddito_giornaliero <- runif(100, min = 10, max = 20) # Line plot plot(reddito_giornaliero, type = "l", main = "Reddito Giornaliero - 100 Giorni", xlab = "Giorno", ylab = "Reddito", col = "darkgreen", lwd = 2)

Bar Plot

# Dati di esempio età <- 20:29 studenti <- c(2, 1, 5, 3, 7, 4, 2, 6, 1, 0) # Bar plot barplot(studenti, names.arg = età, main = "Distribuzione Età Studenti", xlab = "Età", ylab = "Numero di Studenti", col = "steelblue", border = "white")

Histogram

# Generare dati casuali pesi <- runif(100, min = 40, max = 80) # Istogramma hist(pesi, breaks = seq(40, 80, by = 10), main = "Distribuzione dei Pesi", xlab = "Peso (kg)", ylab = "Frequenza", col = "lightblue", border = "black")

Box Plot

# Generare dati per due gruppi altezza <- c(runif(50, min = 40, max = 80), runif(50, min = 45, max = 70)) gruppo <- rep(c("A", "B"), each = 50) # Box plot boxplot(altezza ~ gruppo, main = "Altezze per Gruppo", xlab = "Gruppo", ylab = "Altezza (cm)", col = c("lightgreen", "lightcoral"))

Multiple Plots

# Impostare layout per grafici multipli par(mfrow = c(2, 2)) # Creare 4 grafici diversi x <- 1:6 y <- c(33, 11, 5, 9, 22, 30) barplot(y, main = "Barplot", names.arg = x) barplot(y, main = "Horizontal Barplot", names.arg = x, horiz = TRUE) plot(x, y, type = "l", main = "Line Plot") plot(x, y, main = "Scatter Plot", col = "red") # Ripristinare layout normale par(mfrow = c(1, 1))

Salvare Grafici

# Salvare come PDF pdf("mio_grafico.pdf", width = 8, height = 6) plot(x, y, main = "Il Mio Grafico") dev.off() # Salvare come PNG png("mio_grafico.png", width = 800, height = 600) plot(x, y, main = "Il Mio Grafico") dev.off() # Salvare come JPEG jpeg("mio_grafico.jpg", width = 800, height = 600, quality = 100) plot(x, y, main = "Il Mio Grafico") dev.off()

💾 11. Importare ed Esportare Dati

Salvare e Caricare Variabili R

# Salvare una singola variabile in formato .RDS mia_variabile <- c(1, 2, 3, 4, 5) saveRDS(mia_variabile, file = "variabile.rds") # Caricare la variabile mia_variabile_caricata <- readRDS("variabile.rds") # Salvare tutto il workspace in formato .RData save.image(file = "workspace.RData") # Salvare oggetti specifici x <- 10 y <- 20 save(x, y, file = "variabili.RData") # Caricare un file .RData load("workspace.RData")

Importare Dati CSV

# Leggere un file CSV dati <- read.csv("dati.csv") # Con separatore diverso dati <- read.csv("dati.csv", sep = ";") # Senza header dati <- read.csv("dati.csv", header = FALSE) # Usando readr (più veloce) library(readr) dati <- read_csv("dati.csv")

Esportare Dati CSV

# Scrivere un data frame in CSV write.csv(df1, file = "risultati.csv", row.names = FALSE) # Con separatore diverso write.csv(df1, file = "risultati.csv", sep = ";", row.names = FALSE) # Usando readr library(readr) write_csv(df1, "risultati.csv")

Importare Dati Excel

# Installare il pacchetto install.packages("readxl") library(readxl) # Leggere un file Excel dati_excel <- read_excel("dati.xlsx") # Leggere un foglio specifico dati_excel <- read_excel("dati.xlsx", sheet = "Foglio2") # Specificare il range di celle dati_excel <- read_excel("dati.xlsx", range = "A1:D10")

🔧 12. Funzioni in R

Le funzioni permettono di creare blocchi di codice riutilizzabili e organizzare meglio il proprio lavoro.

Creare Funzioni

# Funzione semplice mia_somma <- function(x, y) { risultato <- x + y return(risultato) } # Usare la funzione mia_somma(5, 3)
[1] 8
# Funzione con valori di default saluta <- function(nome = "Mondo") { paste("Ciao", nome, "!") } saluta()
[1] "Ciao Mondo !"
saluta("Alice")
[1] "Ciao Alice !"
# Funzione con più return analizza_numero <- function(x) { if (x > 0) { return("Positivo") } else if (x < 0) { return("Negativo") } else { return("Zero") } } analizza_numero(-5)
[1] "Negativo"

Variabili Locali e Globali

# Variabile globale x <- 10 # Funzione che usa variabile globale usa_globale <- function() { y <- x + 1 # x è globale return(y) } usa_globale()
[1] 11
# Variabile locale nasconde variabile globale esempio_locale <- function() { x <- 5 # x locale return(x) } esempio_locale() # Restituisce 5 (x locale)
[1] 5
x # x globale è ancora 10
[1] 10
⚠️ Best Practice

È buona pratica evitare l'uso di variabili globali quando possibile. Invece, passa i dati tra funzioni usando argomenti e valori di ritorno. Questo rende il codice più modulare, più facile da testare e da debuggare.

🐛 13. Debugging

Il debugging è fondamentale per identificare e correggere errori nel codice.

Tecniche di Debugging

# 1. Usare print() per controllare valori mia_funzione <- function(x) { print(paste("x =", x)) # Stampa valore y <- x * 2 print(paste("y =", y)) # Stampa risultato return(y) } # 2. Usare browser() per fermare l'esecuzione debug_function <- function(x) { y <- x + 1 browser() # Ferma qui e apre debugger interattivo z <- y * 2 return(z) } # 3. Usare debug() per debuggare una funzione debug(mia_funzione) mia_funzione(5) # Entra in modalità debug undebug(mia_funzione) # Disattiva debug # 4. Usare traceback() dopo un errore # Dopo che si verifica un errore, digita: traceback() # Mostra la sequenza di chiamate # 5. Usare try-catch per gestire errori risultato <- tryCatch({ # Codice che potrebbe dare errore log("non un numero") }, error = function(e) { print(paste("Errore:", e$message)) return(NA) })

📦 14. Introduzione a dplyr

dplyr è uno dei pacchetti più importanti per la manipolazione dei dati in R. Offre una sintassi intuitiva e funzioni veloci per lavorare con data frame.

Installazione e Caricamento

# Installare dplyr install.packages("dplyr") # Caricare dplyr library(dplyr)

Pipe Operator %>%

L'operatore pipe (%>%) è il cuore di dplyr. Permette di concatenare operazioni in modo leggibile, passando il risultato di una funzione alla successiva.

# Senza pipe (difficile da leggere) risultato <- arrange(filter(select(iris, Species, Sepal.Length), Sepal.Length > 5), Sepal.Length) # Con pipe (facile da leggere) risultato <- iris %>% select(Species, Sepal.Length) %>% filter(Sepal.Length > 5) %>% arrange(Sepal.Length)

Funzioni Principali di dplyr

Funzione Descrizione
%>% Operatore pipe per concatenare operazioni
filter() Filtrare righe in base a condizioni
select() Selezionare colonne
mutate() Creare o modificare colonne
arrange() Ordinare righe
group_by() Raggruppare dati
summarise() Calcolare statistiche riassuntive

Esempi Pratici

# Caricare il dataset iris data(iris) # 1. filter() - Filtrare solo specie setosa setosa_data <- iris %>% filter(Species == "setosa") # 2. select() - Selezionare solo alcune colonne petali <- iris %>% select(Petal.Length, Petal.Width, Species) # 3. mutate() - Creare nuova colonna iris_nuova <- iris %>% mutate(Sepal.Area = Sepal.Length * Sepal.Width) # 4. arrange() - Ordinare per lunghezza sepalo iris_ordinata <- iris %>% arrange(Sepal.Length) # Ordinare in modo decrescente iris_ordinata_desc <- iris %>% arrange(desc(Sepal.Length)) # 5. group_by() + summarise() - Statistiche per gruppo statistiche_per_specie <- iris %>% group_by(Species) %>% summarise( media_lunghezza = mean(Sepal.Length), max_lunghezza = max(Sepal.Length), min_lunghezza = min(Sepal.Length), n = n() ) # Esempio complesso: combinare più operazioni risultato_finale <- iris %>% filter(Sepal.Length > 5) %>% select(Species, Sepal.Length, Petal.Length) %>% mutate(ratio = Sepal.Length / Petal.Length) %>% group_by(Species) %>% summarise( media_ratio = mean(ratio), conteggio = n() ) %>% arrange(desc(media_ratio))
✨ Perché Usare dplyr?
  • Leggibilità: Il codice è più facile da leggere e capire
  • Velocità: Ottimizzato per operazioni su grandi dataset
  • Consistenza: Sintassi uniforme per tutte le operazioni
  • Concatenazione: Facile concatenare operazioni complesse

🎓 15. Progetti e Best Practices

Lavorare con Progetti R

I progetti R in RStudio aiutano a organizzare il lavoro, mantenendo tutti i file, dati e output relativi a un progetto specifico in un unico posto.

📁 Struttura Progetto Consigliata
mio_progetto/
├── mio_progetto.Rproj
├── data/
│   ├── raw/           # Dati grezzi (non modificare)
│   └── processed/     # Dati elaborati
├── scripts/
│   ├── 01_import.R    # Script import dati
│   ├── 02_clean.R     # Script pulizia dati
│   └── 03_analyze.R   # Script analisi
├── plots/             # Grafici salvati
├── results/           # Risultati analisi
└── README.md          # Documentazione progetto

Best Practices

💡 Consigli per Codice di Qualità
  • Commenta il codice: Spiega il "perché", non solo il "cosa"
  • Usa nomi descrittivi: media_voti_studenti invece di m
  • Dividi in funzioni: Ogni funzione dovrebbe fare una cosa sola
  • Usa il version control: Git per tracciare le modifiche
  • Non ripeterti (DRY): Crea funzioni per codice ripetuto
  • Testa il codice: Verifica che funzioni con diversi input
  • Documenta: Scrivi README e help per le funzioni
  • Usa pacchetti standard: tidyverse, data.table, ggplot2

Ottenere Aiuto

# Aiuto su una funzione ?mean help(mean) # Cercare in tutta la documentazione ??"linear model" # Esempi di utilizzo example(plot) # Aprire la documentazione nel browser help.start() # Cercare pacchetti help.search("regression")
🌐 Risorse Online

✅ 16. Esercizi Pratici

📝 Esercizio 1: Operazioni Base con Matrici
  1. Creare un vettore con i numeri da 1 a 10 usando l'operatore :
  2. Creare lo stesso vettore usando seq()
  3. Creare una matrice 4x2 di zeri chiamata mymat
  4. Sostituire la seconda riga con un vettore contenente 3 e 6
  5. Creare un vettore x con 20 punti equidistanti tra -π e +π
  6. Creare un vettore y che è sin(x)
  7. Creare una matrice 4x6 di interi casuali tra -5 e 5
  8. Calcolare il valore assoluto di ogni elemento
📝 Esercizio 2: Visualizzazione Dati
  1. Caricare il dataset sunspot.year usando data("sunspot.year")
  2. Creare un vettore year con gli anni corrispondenti
  3. Creare un data frame con year e sunspots
  4. Fare un line plot di sunspots vs. year
  5. Aggiungere punti rossi al grafico usando points()
  6. Aggiungere il titolo "Sunspots per Anno"
  7. Creare un layout con 3 pannelli (line plot, barplot, histogram)
  8. Salvare il grafico come .png
  9. Salvare il data frame come .csv
📝 Esercizio 3: Funzioni e Grafici
  1. Creare una funzione che converte cm in pollici (2.54 cm = 1 inch)
  2. Creare dati di temperatura per diversi orari del giorno
  3. Fare un plot con simboli '+'
  4. Regolare il range dell'asse x per migliorare la visualizzazione
  5. Salvare il grafico come PDF con dimensioni 10cm x 10cm
📝 Esercizio 4: dplyr e Dataset Iris
  1. Caricare il dataset iris: data("iris")
  2. Esplorare il dataset: dimensioni, struttura, statistiche
  3. Filtrare solo la specie setosa usando dplyr
  4. Ordinare per lunghezza del sepalo
  5. Mostrare le prime righe con head()
  6. Trovare la lunghezza minima del sepalo per setosa
  7. Per ogni specie, calcolare la lunghezza minima del sepalo

🎉 17. Conclusione

🎯 Cosa Hai Imparato
  • ✅ Cos'è R e la sua storia
  • ✅ Punti di forza e debolezze di R
  • ✅ Download e installazione di R e RStudio
  • ✅ Interfaccia e personalizzazione di RStudio
  • ✅ Operazioni matematiche e dichiarazione variabili
  • ✅ Strutture dati: vettori, matrici, liste, data frame, fattori
  • ✅ Operazioni con vettori e matrici
  • ✅ Strutture di controllo: if, for, while
  • ✅ Visualizzazione dati con plot, barplot, histogram, boxplot
  • ✅ Import/export di dati (CSV, Excel, RData)
  • ✅ Creazione e utilizzo di funzioni
  • ✅ Tecniche di debugging
  • ✅ Introduzione a dplyr per manipolazione dati
  • ✅ Best practices e organizzazione progetti
💡 Prossimi Passi: Ora che hai imparato le basi di R, puoi approfondire argomenti più avanzati come machine learning con caret, visualizzazioni avanzate con ggplot2, analisi di serie temporali, creazione di package, programmazione funzionale, e molto altro. R è uno strumento incredibilmente potente e versatile - continua a esplorare e sperimentare! 📊✨

Buono studio e buon coding con R! 🚀📈