vapply() と sapply() の違い
前の例では、market_crash2 の date 要素が 2 つのクラス(POSIXct と POSIXt)を持っていたため、sapply() は単純化に失敗しました。ただし、エラーは発生しませんでしたね!もしあなたが書いた関数が sapply() から単純化されたベクトルの返り値を前提としていたら、これは紛らわしい結果になります。
このような状況に対応するため、より厳密な適用関数である vapply() があります。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()を使って、market_crash2の各要素のclass()を求めてください。エラーにはならず、リストが返ることに注目してください。 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()
___