無法簡化
在互動式使用上,sapply() 很好用。它會猜測輸出型別以便進行簡化,通常這沒有問題。不過,在撰寫函式時,sapply() 並不是安全的選擇。若 sapply() 無法簡化你的輸出,它會退回到像 lapply() 一樣回傳一個 list。這可能很危險,若你原本假設 sapply() 會回傳已簡化的向量,客製函式就可能失效。
我們來看一個練習,使用一個包含 2008 年股市崩盤資訊的 list。
本練習屬於課程
R 金融中級
練習說明
已為你建立 market_crash 這個 list。
- 使用
sapply()取得market_crash中每個元素的class()。
另外建立了一個新的 list: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()
___