vapply() vs. sapply()
In het vorige voorbeeld kon sapply() niet simplificeren omdat het element date van market_crash2 twee klassen had (POSIXct en POSIXt). Merk op dat er geen fout werd gegenereerd! Als een functie die je schreef verwachtte dat sapply() een gesimplificeerde vector zou teruggeven, zou dat verwarrend zijn.
Om dit te ondervangen is er een strengere apply-functie, vapply(), met een extra argument FUN.VALUE waarmee je het type en de lengte van de output kunt specificeren die elke keer moet worden teruggegeven wanneer je functie wordt aangeroepen.
Als je verwácht dat de returnwaarde van class() een tekenvector van lengte 1 is, kun je dat opgeven met vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Andere voorbeelden van FUN.VALUE zijn bijvoorbeeld numeric(2) of logical(1). market_crash2 is weer voor je gedefinieerd.
Deze oefening maakt deel uit van de cursus
R voor finance voor gevorderden
Oefeninstructies
- Gebruik opnieuw
sapply()om declass()van de elementen inmarket_crash2te bepalen. Let op dat er een lijst wordt teruggegeven en geen foutmelding. - Gebruik
vapply()opmarket_crash2om declass()te bepalen. SpecificeerFUN.VALUE = character(1). Het zou terecht moeten falen.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()
___