←
PDF 355 / 520 Dealing with Failure
→
English · PDF 355
Original PDF page 355
中文 · PDF 355
  • c. 计算 iris 每一列中唯一值的数量。
  • d. 为 μ = –10、0、10 和 生成 10 个随机正态数
    1. 如何创建一个向量,对数据框中的每一列指示它是否为因子?
    1. 对不是列表的向量使用 map 函数会发生什么?map(1:5, runif) 做了什么?为什么?
    1. map(-2:2, rnorm, n = 5) 做了什么?为什么?map_dbl(-2:2, rnorm, n = 5) 做了什么?为什么?
    1. 重写 map(x, function(df) lm(mpg ~ wt, data = df)),以消除匿名函数。

处理失败

当你使用 map 函数重复执行许多操作时,其中某个操作失败的可能性会大大增加。一旦发生这种情况,你会收到一条错误消息,并且没有任何输出。这很令人恼火:为什么一次失败会阻止你访问所有其他成功的结果?如何确保一个坏苹果不会毁掉整桶苹果?

在本节中,你将学习如何用一个新函数来处理这种情况:safely()。safely() 是一个副词:它接受一个函数(动词)并返回一个修改后的版本。在这里,修改后的函数永远不会抛出错误。相反,它总是返回一个包含两个元素的列表:

result

原始结果。如果发生了错误,这将是 NULL。

error

一个错误对象。如果操作成功,这将是 NULL。

(你可能熟悉 base R 中的 try() 函数。它与此类似,但由于它有时返回原始结果、有时返回错误对象,所以使用起来更困难。)