始める無料で始める

単純化に失敗する場合

対話的に使うなら、sapply() はとても便利です。出力型を推測して単純化してくれるため、通常はそれで問題ありません。ただし、関数を書くときに sapply() を使うのは安全ではありません。sapply() が出力を単純化できない場合、lapply() と同じようにリストを返すのがデフォルト動作です。これは危険で、sapply() が単純化されたベクトルを返すことを前提に関数を書いていると、関数が壊れる原因になります。

ここでは、2008 年の株式市場の暴落に関する情報を含むリストを使った演習を見ていきます。

この演習はコースの一部です

金融のための中級R

コースを見る

演習の手順

リスト market_crash は用意してあります。

  • sapply() を使って、market_crash の各要素の class() を取得してください。


新しいリスト market_crash2 が作成されました。違いは日付の作り方にあります!

  • lapply() を使って、market_crash2 の各要素の class() を取得してください。
  • sapply() を使って、market_crash2 の各要素の class() を取得してください。


market_crash2date には複数のクラスがあります。なぜ sapply() はこれを単純化できなかったのでしょうか?

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Market crash with as.Date()
market_crash <- list(dow_jones_drop = 777.68, 
                     date = as.Date("2008-09-28"))
                     
# Find the classes with sapply()
___

# Market crash with as.POSIXct()
market_crash2 <- list(dow_jones_drop = 777.68, 
                      date = as.POSIXct("2008-09-28"))

# Find the classes with lapply()
___

# Find the classes with sapply()
___
コードを編集して実行