ComenzarEmpieza gratis

vapply() vs. sapply()

En el último ejemplo, sapply() no pudo simplificar porque el elemento date de market_crash2 tenía dos clases (POSIXct y POSIXt). Sin embargo, fíjate que no se lanzó ningún error. Si una función que hubieras escrito esperara que sapply() devolviera un vector simplificado, esto resultaría confuso.

Para tenerlo en cuenta, existe una función apply más estricta llamada vapply(), que incluye un argumento extra, FUN.VALUE, donde puedes especificar el tipo y la longitud de la salida que se debe devolver cada vez que se llame a tu función aplicada.

Si esperabas que el valor de retorno de class() fuera un vector de caracteres de longitud 1, puedes indicarlo usando vapply():

vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop           date 
     "numeric"         "Date"

Otros ejemplos de FUN.VALUE podrían ser numeric(2) o logical(1). market_crash2 vuelve a estar definido para ti.

Este ejercicio forma parte del curso

R intermedio para finanzas

Ver curso

Instrucciones del ejercicio

  • Usa sapply() de nuevo para obtener la class() de los elementos de market_crash2. Observa cómo devuelve una lista y no un error.
  • Usa vapply() sobre market_crash2 para obtener la class(). Especifica FUN.VALUE = character(1). Debería fallar de forma adecuada.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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()
___
Editar y ejecutar código