始める無料で始める

vapply() と sapply() の違い

前の例では、market_crash2date 要素が 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()
___
コードを編集して実行