IniziaInizia gratis

vapply() vs. sapply()

Nell'ultimo esempio, sapply() non è riuscita a semplificare perché l'elemento date di market_crash2 aveva due classi (POSIXct e POSIXt). Nota però che non è stato generato alcun errore! Se una funzione che hai scritto si aspettasse che sapply() restituisse un vettore semplificato, questo sarebbe fuorviante.

Per gestire questo caso, esiste una funzione apply più rigorosa chiamata vapply(), che contiene un argomento aggiuntivo FUN.VALUE con cui puoi specificare il tipo e la lunghezza dell'output che deve essere restituito ogni volta che la funzione applicata viene chiamata.

Se ti aspetti che il valore restituito da class() sia un vettore di tipo character di lunghezza 1, puoi specificarlo usando vapply():

vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop           date 
     "numeric"         "Date"

Altri esempi di FUN.VALUE potrebbero essere numeric(2) o logical(1). market_crash2 è di nuovo definito per te.

Questo esercizio fa parte del corso

R intermedio per la finanza

Visualizza il corso

Istruzioni dell'esercizio

  • Usa di nuovo sapply() per trovare la class() degli elementi di market_crash2. Nota come restituisce una lista e non un errore.
  • Usa vapply() su market_crash2 per trovare la class(). Specifica FUN.VALUE = character(1). Dovrebbe giustamente generare un errore.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# Market crash with as.POSIXct()
market_crash2 <- list(dow_jones_drop = 777.68, 
                      date = as.POSIXct("2008-09-28"))

# Find the classes with sapply()
___

# Find the classes with vapply()
___
Modifica ed esegui il codice