vapply() vs. sapply()
V předchozím příkladu sapply() nedokázalo výsledek zjednodušit, protože prvek date v market_crash2 měl dvě třídy (POSIXct a POSIXt). Všimni si ale, že žádná chyba nebyla vyvolána! Pokud by funkce, kterou jsi napsal/a, očekávala zjednodušený vektor vrácený pomocí sapply(), mohlo by to způsobit zmatek.
Aby ses s tímto vypořádal/a, existuje přísnější apply funkce vapply(), která obsahuje extra argument FUN.VALUE. V něm můžeš určit typ a délku výstupu, který má být vrácen při každém volání aplikované funkce.
Pokud očekáváš, že návratová hodnota class() bude znakový vektor délky 1, můžeš to specifikovat pomocí vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Další příklady hodnoty FUN.VALUE mohou být numeric(2) nebo logical(1). market_crash2 je pro tebe opět předem definováno.
Toto cvičení je součástí kurzu
Intermediate R for Finance
Pokyny k cvičení
- Použij znovu
sapply()k zjištění třídy (class()) prvkůmarket_crash2. Všimni si, že vrátí seznam, nikoli chybu. - Použij
vapply()namarket_crash2k zjištění třídy (class()). NastavFUN.VALUE = character(1). Tentokrát by to mělo správně selhat.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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()
___