←
PDF 354 / 520 Exercises
→
English · PDF 354
Original PDF page 354
中文 · PDF 354
  • 基础 sapply() 是 lapply() 的一个包装器,它会自动简化输出。这在交互式工作中很有用,但在函数中却有问题,因为你永远不知道会得到什么样的输出:

x1 <- list( c(0.27, 0.37, 0.57, 0.91, 0.20), c(0.90, 0.94, 0.66, 0.63, 0.06), c(0.21, 0.18, 0.69, 0.38, 0.77) ) x2 <- list( c(0.50, 0.72, 0.99, 0.38, 0.78), c(0.93, 0.21, 0.65, 0.13, 0.27), c(0.39, 0.01, 0.38, 0.87, 0.34) ) threshold <- function(x, cutoff = 0.8) x[x > cutoff] x1 %>% sapply(threshold) %>% str() #> List of 3 #> $ : num 0.91 #> $ : num [1:2] 0.9 0.94 #> $ : num(0) x2 %>% sapply(threshold) %>% str() #> num [1:3] 0.99 0.93 0.87

  • vapply() 是 sapply() 的一个安全替代方案,因为你可以提供一个额外的参数来定义输出类型。vapply() 唯一的问题是需要输入很多内容:vapply(df, is.numeric, logical(1)) 等价于 map_lgl(df, is.numeric)。与 purrr 的 map 函数相比,vapply() 的一个优势是它还可以生成矩阵——而 map 函数只能生成向量。

这里我们重点介绍 purrr 函数,因为它们的名称和参数更加一致,提供了实用的快捷方式,并且将来还会提供便捷的并行计算和进度条功能。

练习

    1. 编写代码,使用其中一个 map 函数来完成:
    • a. 计算 mtcars 中每一列的均值。
    • b. 确定 nyc flights13::flights 中每一列的类型。