专注系列化、高质量的R语言教程
下面几个函数可以帮助用户更好地控制程序进程:
- stop函数
- break函数
- next函数
- try函数
stop函数
顾名思义,stop()
函数会直接终止当前执行语句,并返回一个错误警告``Error in...`。该函数通常接在if语句后面。
stop()
函数的一个常用场景是在编写函数时判断输入参数是否合适,如不合适则终止程序并报错。
例如,编写一个函数,返回输入数值的算术平方根;若输入参数不是数值或数值小于0则程序终止:
ff <- function(x) {
if (!is.numeric(x) | x < 0) stop("x应为数值且为非负数")
return(sqrt(x))
}
ff(-1)
## Error in ff("x") : x应为数值且为非负数
ff("x")
## Error in ff("x") : x应为数值且为非负数
break函数
break
这个词也有终止之义,但它的用法与stop()
函数有所不同,它通常用于循环语句(for循环、while循环、repeat循环)中。它的使用场景是:当设定条件达到时,直接跳出循环,但不会报错。
例如下面的例子,虽然i
的取值集合设定为1到100的整数,但实际上i = 21
时就跳出循环了:
for(i in 1:100) {
j = 5*i
if (j > 100) break
}
i
## [1] 21
那stop()
函数和break
函数有何本质区别呢?
区别就在于是否会报错。
stop()
函数的作用在于警告用户程序出错。一旦程序中途报错,R程序就会停止运行,后面的程序也不会运行,并且不会返回输出值(但不影响中间变量输出到全局环境中);break
函数的作用是在必要的情况下提前跳出循环,它不会报错,因此不会影响循环语句后面的程序继续运行。
例如把上面例子中的break
换成stop()
,程序运行至for循环就停止了,最后一行的i
根本没机会运行:
for(i in 1:100) {
j = 5*i
if (j > 100) stop()
}
## 上行报错,本行不运行
i
此外,二者还有一个区别:stop()
函数即使不设置任何参数时也得带上圆括号;而break
函数通常不需要写成break()
,当然写成后者也是可以的。