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.33333Funzioni 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))Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
MedioCrea 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:
- Crea una nuova colonna chiamata
student_meanche contiene il punteggio medio. - Crea una nuova colonna chiamata
is_above_meanche contiene TRUE o FALSE a seconda che lo studente sia sopra o sotto la media. - Crea una colonna chiamata
rankche 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))
- Per trovare la posizione, usa
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