ÎncepețiÎncepe gratuit

vapply() vs. sapply()

În ultimul exemplu, sapply() nu a reușit să simplifice rezultatul deoarece elementul date din market_crash2 avea două clase (POSIXct și POSIXt). Observă, totuși, că nu a fost generată nicio eroare! Dacă o funcție pe care ai scris-o se aștepta ca sapply() să returneze un vector simplificat, situația ar fi fost confuză.

Pentru a gestiona acest lucru, există o funcție apply mai strictă numită vapply(), care include un argument suplimentar, FUN.VALUE, unde poți specifica tipul și lungimea rezultatului ce ar trebui returnat de fiecare dată când funcția aplicată este apelată.

Dacă te așteptai ca valoarea returnată de class() să fie un vector de caractere cu lungimea 1, poți specifica acest lucru folosind vapply():

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

Alte exemple pentru FUN.VALUE pot fi numeric(2) sau logical(1). market_crash2 este din nou definit pentru tine.

Acest exercițiu face parte din cursul

R intermediar pentru finanțe

Vezi cursul

Instrucțiuni pentru exercițiu

  • Folosește din nou sapply() pentru a afla class()-ul elementelor din market_crash2. Observă că returnează o listă, nu o eroare.
  • Folosește vapply() pe market_crash2 pentru a afla class()-ul. Specifică FUN.VALUE = character(1). Funcția ar trebui să eșueze în mod corespunzător.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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()
___
Editează și rulează codul