vapply() 與 sapply()
在上一個例子中,sapply() 無法簡化,因為 market_crash2 的 date 元素有兩個類別(POSIXct 與 POSIXt)。不過請注意,它並沒有拋出錯誤!如果你撰寫的函式預期 sapply() 會回傳已簡化的向量,這會讓人困惑。
為了處理這種情況,有一個更嚴格的 apply 函式叫做 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()。注意它會回傳清單而不是錯誤。 - 在
market_crash2上使用vapply()找出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()
___