vapply() 与 sapply()
在上一个示例中,sapply() 未能简化,因为 market_crash2 的 date 元素有两个类(POSIXct 和 POSIXt)。不过请注意,它并没有抛出错误!如果您编写的函数期望 sapply() 返回一个已简化的向量,这就会让人困惑。
为了解决这一点,可以使用更严格的 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()
___