Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Gebruik opnieuw sapply() om de class() van de elementen in market_crash2 te bepalen. Let op dat er een lijst wordt teruggegeven en geen foutmelding.
  • Gebruik vapply() op market_crash2 om de class() te bepalen. Specificeer FUN.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()
___
Code bewerken en uitvoeren