CommencerCommencer gratuitement

vapply() vs. sapply()

Dans le dernier exemple, sapply() n’a pas réussi à simplifier, car l’élément date de market_crash2 avait deux classes (POSIXct et POSIXt). Remarquez toutefois qu’aucune erreur n’a été levée ! Si une fonction que vous aviez écrite s’attendait à ce que sapply() renvoie un vecteur simplifié, cela pourrait prêter à confusion.

Pour gérer ce cas, il existe une fonction apply plus stricte appelée vapply(), qui contient un argument supplémentaire FUN.VALUE vous permettant de préciser le type et la longueur de la sortie à renvoyer à chaque appel de votre fonction appliquée.

Si vous vous attendiez à ce que la valeur de retour de class() soit un vecteur de caractères de longueur 1, vous pouvez le préciser avec vapply() :

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

D’autres exemples de FUN.VALUE pourraient être numeric(2) ou logical(1). market_crash2 est de nouveau défini pour vous.

Cet exercice fait partie du cours

R intermédiaire pour la finance

Afficher le cours

Instructions

  • Utilisez à nouveau sapply() pour trouver la class() des éléments de market_crash2. Remarquez qu’il renvoie une liste et non une erreur.
  • Utilisez vapply() sur market_crash2 pour obtenir la class(). Indiquez FUN.VALUE = character(1). Cela devrait échouer comme prévu.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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()
___
Modifier et exécuter le code