专注系列化高质量的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(),当然写成后者也是可以的。