开始使用免费开始使用

vapply() 与 sapply()

在上一个示例中,sapply() 未能简化,因为 market_crash2date 元素有两个类(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()
___
编辑并运行代码