vapply() проти sapply()
У попередньому прикладі sapply() не зміг спростити результат, оскільки елемент date у market_crash2 мав два класи (POSIXct і POSIXt). Зверніть увагу, що помилки при цьому не було! Якби ваша функція очікувала, що sapply() поверне спрощений вектор, це могло б збити з пантелику.
Щоб це врахувати, існує більш сувора функція з родини apply — vapply(). Вона містить додатковий аргумент FUN.VALUE, у якому ви вказуєте тип і довжину вихідних даних, які мають повертатися щоразу при виклику вашої функції.
Якщо ви очікуєте, що значення, яке повертає class(), — це символьний вектор довжини 1, ви можете вказати це через vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Інші приклади FUN.VALUE: numeric(2) або logical(1). market_crash2 знову визначено для вас.
Ця вправа є частиною курсу
Середній рівень R для фінансів
Інструкції до вправи
- Знову використайте
sapply(), щоб знайтиclass()елементівmarket_crash2. Зверніть увагу, що він повертає список, а не помилку. - Застосуйте
vapply()доmarket_crash2, щоб визначитиclass(). УкажітьFUN.VALUE = character(1). Має коректно завершитися помилкою.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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()
___