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()
___