単純化に失敗する場合
対話的に使うなら、sapply() はとても便利です。出力型を推測して単純化してくれるため、通常はそれで問題ありません。ただし、関数を書くときに sapply() を使うのは安全ではありません。sapply() が出力を単純化できない場合、lapply() と同じようにリストを返すのがデフォルト動作です。これは危険で、sapply() が単純化されたベクトルを返すことを前提に関数を書いていると、関数が壊れる原因になります。
ここでは、2008 年の株式市場の暴落に関する情報を含むリストを使った演習を見ていきます。
この演習はコースの一部です
金融のための中級R
演習の手順
リスト market_crash は用意してあります。
sapply()を使って、market_crashの各要素のclass()を取得してください。
新しいリスト market_crash2 が作成されました。違いは日付の作り方にあります!
lapply()を使って、market_crash2の各要素のclass()を取得してください。sapply()を使って、market_crash2の各要素のclass()を取得してください。
market_crash2 の date には複数のクラスがあります。なぜ 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()
___