vapply() vs. sapply()
I det föregående exemplet misslyckades sapply() med att förenkla resultatet eftersom elementet date i market_crash2 hade två klasser (POSIXct och POSIXt). Notera dock att inget fel kastades! Om en funktion du hade skrivit förväntade sig en förenklad vektor från sapply(), skulle det här vara förvirrande.
För att hantera detta finns det en striktare apply-funktion som heter vapply(). Den innehåller ett extra argument, FUN.VALUE, där du kan ange typ och längd på det resultat som ska returneras varje gång din applicerade funktion anropas.
Om du förväntade dig att returvärdet från class() skulle vara en teckenvektorvektor av längd 1 kan du ange det med vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Andra exempel på FUN.VALUE kan vara numeric(2) eller logical(1). market_crash2 är återigen definierad åt dig.
Den här övningen är en del av kursen
R för finans – fortsättningskurs
Övningsinstruktioner
- Använd
sapply()igen för att hitta klassen (class()) för elementen imarket_crash2. Notera att den returnerar en lista och inte ett fel. - Använd
vapply()påmarket_crash2för att hitta klassen (class()). AngeFUN.VALUE = character(1). Den ska nu misslyckas på rätt sätt.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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()
___