LoslegenKostenlos loslegen

vapply() vs. sapply()

Im letzten Beispiel konnte sapply() nicht vereinfachen, weil das Element date von market_crash2 zwei Klassen hatte (POSIXct und POSIXt). Beachte jedoch, dass kein Fehler ausgegeben wurde! Wenn eine von dir geschriebene Funktion erwartete, dass sapply() einen vereinfachten Vektor zurückgibt, wäre das verwirrend.

Dafür gibt es die strengere Apply-Funktion vapply(). Sie hat ein zusätzliches Argument FUN.VALUE, mit dem du Typ und Länge der Ausgabe festlegst, die jedes Mal zurückgegeben werden soll, wenn deine angewandte Funktion aufgerufen wird.

Wenn du erwartest, dass der Rückgabewert von class() ein Zeichenvektor der Länge 1 ist, kannst du das mit vapply() angeben:

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

Weitere Beispiele für FUN.VALUE wären numeric(2) oder logical(1). market_crash2 ist wieder für dich definiert.

Diese Übung ist Teil des Kurses

R für Finanzen – Aufbaukurs

Kurs anzeigen

Anleitung zur Übung

  • Verwende erneut sapply(), um die class()-Werte der Elemente von market_crash2 zu ermitteln. Beachte, dass eine Liste und kein Fehler zurückgegeben wird.
  • Verwende vapply() auf market_crash2, um die class() zu bestimmen. Gib FUN.VALUE = character(1) an. Dabei sollte es sinnvollerweise scheitern.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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()
___
Code bearbeiten und ausführen