1. 学ぶ
  2. /
  3. コース
  4. /
  5. 金融のための中級R

Connected

演習

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 は今回も用意されています。

指示

100 XP
  • もう一度 sapply() を使って、market_crash2 の各要素の class() を求めてください。エラーにはならず、リストが返ることに注目してください。
  • vapply() を market_crash2 に適用して class() を求めてください。FUN.VALUE = character(1) を指定します。適切に失敗してエラーになるはずです。