開始使用免費開始

vapply() 與 sapply()

在上一個例子中,sapply() 無法簡化,因為 market_crash2date 元素有兩個類別(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()
___
編輯並執行程式碼