Perché non capisco il tuo codice?

Introduzione alla scrittura di funzioni in R

Richie Cotton

Data Evangelist at DataCamp

Verbi di dplyr

select() seleziona colonne

filter() filtra righe

Introduzione alla scrittura di funzioni in R

I nomi delle funzioni dovrebbero contenere un verbo

  • get
  • calculate (o magari solo calc)
  • run
  • process
  • import
  • clean
  • tidy
  • draw
Introduzione alla scrittura di funzioni in R

lm() è un pessimo nome

  • Gli acronimi non si spiegano da soli
  • Non contiene un verbo
  • Esistono molti modelli lineari diversi

Un nome migliore sarebbe run_linear_regression()

Introduzione alla scrittura di funzioni in R

Leggibilità vs. digitabilità

  • Capire il codice >> digitare codice
Introduzione alla scrittura di funzioni in R

Leggibilità vs. digitabilità

  • Capire il codice >> digitare codice
  • Gli editor hanno l'autocompletamento

Autocompletamento di DataCamp

Introduzione alla scrittura di funzioni in R

Leggibilità vs. digitabilità

  • Capire il codice >> digitare codice
  • Gli editor hanno l'autocompletamento
  • Puoi creare alias per funzioni comuni
h <- head
data(cats, package = "MASS")
h(cats)
  Sex Bwt Hwt
1   F 2.0 7.0
2   F 2.0 7.4
3   F 2.0 9.5
4   F 2.1 7.2
5   F 2.1 7.3
6   F 2.1 7.6
Introduzione alla scrittura di funzioni in R

Argomenti di lm()

args(lm)
function (formula, data, subset, weights, na.action, method = "qr", 
    model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, 
    contrasts = NULL, offset, ...)
Introduzione alla scrittura di funzioni in R

Tipi di argomenti

  • Argomenti dati: su cosa calcoli
  • Argomenti di dettaglio: come esegui il calcolo
args(cor)
function (x, y = NULL, use = "everything", 
  method = c("pearson", "kendall", "spearman"))
Introduzione alla scrittura di funzioni in R

Gli argomenti dati devono precedere quelli di dettaglio

Questo non funziona

data %>%
  lm(formula)

perché l'argomento dei dati non è il primo.

Introduzione alla scrittura di funzioni in R

La nostra funzione rivista per la regressione lineare

run_linear_regression <- function(data, formula) {
  lm(formula, data)
}
cats %>% 
  run_linear_regression(Hwt ~ Bet + Sex)
Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)          Bwt         SexM  
    -0.4150       4.0758      -0.0821
Introduzione alla scrittura di funzioni in R

Esercitiamoci!

Introduzione alla scrittura di funzioni in R

Preparing Video For Download...