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
Instrucțiuni pentru exercițiu
- Folosește din nou
sapply()pentru a aflaclass()-ul elementelor dinmarket_crash2. Observă că returnează o listă, nu o eroare. - Folosește
vapply()pemarket_crash2pentru a aflaclass()-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()
___