Menu
Coddy logo textTech

Funzioni personalizzate

Lezione 14 di 14 del corso Manipolazione dei dati in R di Coddy.

Le funzioni personalizzate in R sono strumenti potenti per creare codice riutilizzabile ed eseguire trasformazioni dei dati complesse. Ti permettono di incapsulare una serie di operazioni in un'unica unità richiamabile. Esploriamo come creare e usare funzioni personalizzate per le attività di manipolazione dei dati.

Struttura di base di una funzione personalizzata

La sintassi di base per creare una funzione personalizzata in R è:

function_name <- function(arg1, arg2, ...) {
  # Corpo della funzione
  # Operazioni che utilizzano arg1, arg2, ecc.
  return(result)
}

Creare una semplice funzione personalizzata

Creiamo una semplice funzione che calcola la percentuale di valori mancanti in un vettore:

percent_missing <- function(x) {
  sum(is.na(x)) / length(x) * 100
}

# Utilizzo
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # Restituisce: 33.33333

Funzioni con più argomenti

Le funzioni personalizzate possono accettare più argomenti, consentendo operazioni più flessibili:

scale_column <- function(df, column_name, min_val = 0, max_val = 1) {
  df[[column_name]] <- (df[[column_name]] - min(df[[column_name]], na.rm = TRUE)) / 
                       (max(df[[column_name]], na.rm = TRUE) - min(df[[column_name]], na.rm = TRUE))
  df[[column_name]] <- df[[column_name]] * (max_val - min_val) + min_val
  return(df)
}

# Utilizzo
df <- data.frame(x = 1:10, y = 11:20)
scaled_df <- scale_column(df, "x", 0, 100)

Restituire più valori

Le funzioni possono restituire più valori usando una lista:

summarize_numeric <- function(x) {
  list(
    mean = mean(x, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE)
  )
}

# Utilizzo
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

Usare funzioni personalizzate con dplyr

Le funzioni personalizzate possono essere particolarmente utili se combinate con dplyr per la manipolazione dei dati:

library(dplyr)

categorize_age <- function(age) {
  case_when(
    age < 18 ~ "Child",
    age < 65 ~ "Adult",
    TRUE ~ "Senior"
  )
}

# Utilizzo con dplyr
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

challenge icon

Sfida

Medio

Crea una funzione personalizzata chiamata mean_score che calcola il punteggio medio di ogni studente in un dataset di punteggi degli esami degli studenti.

Per calcolare il punteggio medio di ogni riga useremo la funzione rowwise() e in seguito useremo ungroup() per riportare tutto allo stato iniziale. Controlla il codice fornito.

Esegui le seguenti operazioni:

  1. Crea una nuova colonna chiamata student_mean che contiene il punteggio medio.
  2. Crea una nuova colonna chiamata is_above_mean che contiene TRUE o FALSE a seconda che lo studente sia sopra o sotto la media.
  3. Crea una colonna chiamata rank che contiene la posizione di ogni studente rispetto agli altri, in base alla sua media. Ad esempio, 1 significa che lo studente è il migliore, 2 significa che è il secondo migliore, ecc.
    • Per trovare la posizione, usa order(): order(order(mean_col, decreasing = TRUE))

Provalo tu

# Leggi l'input
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# Elabora i dati di input in un data frame
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# Definisci la funzione mean_score
mean_score <- function(data) {
  # TODO: Scrivi qui il tuo codice
  # calcola la media di tutte le materie

  return(result)
}

# TODOL Scrivi qui il tuo codice
# Crea una nuova colonna chiamata student_mean che contenga il punteggio medio.
# Crea una nuova colonna chiamata is_above_mean che contenga TRUE o FALSE a seconda che lo studente sia sopra o sotto la media.
# Crea una colonna chiamata rank che indichi la posizione di ogni studente rispetto agli altri in base alla sua media. Per esempio, 1 significa che lo studente è il migliore, 2 che è il secondo migliore, ecc.

# Stampa il risultato
print(data)

Tutte le lezioni di Manipolazione dei dati in R

Esercitati da solo: Compilatore R online