Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Använd sapply() igen för att hitta klassen (class()) för elementen i market_crash2. Notera att den returnerar en lista och inte ett fel.
  • Använd vapply()market_crash2 för att hitta klassen (class()). Ange FUN.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()
___
Redigera och kör kod