
62
|
第
3
章
是否丢失参数或数值计算失败?有三种主要的与用户交互的技巧。
致命错误
: stop()
调用 stop() 抛出致命错误(例如,执行被终止)。一个函数调用 stop() 后,
将不再执行任何其他操作。当我们使用 rnorm() 生成随机数时,第一个参数
n 是样本数。如果要返回的观测数小于
1
,将产生错误。当我们要抛出错误时,
尽快抛出,否则就是在浪费资源。因此,一个函数的前几行代码通常进行参
数检查。假设我们调用了一个函数并引发了错误,后续该如何做?高效、健
壮的代码捕获错误并做出相应处理。使用 try() 和 tryCatch() 捕获错误。例如:
#
抑制错误信息
good = try(1 + 1, silent = TRUE)
bad = try(1 +
“
1
”
, silent = TRUE)
当我们查看对象时,变量 good 仅包含数值 2。
good
#> [1] 2
然而,bad 对象是一个包含错误信息的字符串,属于 try-error 类,具有
condition
属性。
bad
#> [1] "Error in 1 + \"1\" : non-numeric argument to binary operator\n"
#> attr
(
,"class"
)
#> [1] "try-error"
#> attr
(
,"condition"
)
#> <simpleError in 1 + "1": non-numeric argument to binary operator>
我们可以在标准条件表达式中使用该信息: ...