НачатьНачать бесплатно

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()
___
Редактировать и запускать код