休息/退出脚本

我有一个程序可以做一些数据分析,并且有几百行。

在程序早期,我想做一些质量控制,如果没有足够的数据,我希望程序终止并返回到R控制台。 否则,我想要执行其余的代码。

我尝试了breakbrowserquit并且他们都没有停止执行其他程序(并quit停止执行以及完全退出R,这不是我想要发生的事情)。 我最后的手段是创建一个if-else语句如下:

 if(n < 500){}
 else{*insert rest of program here*}

但这似乎是不好的编码习惯。 我错过了什么吗?


如果您希望程序产生错误,您可以使用stopifnot()函数:

foo <- function(x) {
    stopifnot(x > 500)
    # rest of program
}

反转你的if-else结构:

if(n >= 500) {
  # do stuff
}
# no need for else

编辑:似乎OP正在运行一个长的脚本,在这种情况下,只需要在质量控制后包装脚本的一部分

if (n >= 500) {

.... long running code here

}

如果抛出一个函数 ,你可能只想显式或隐式地return()

例如,明确的双重回报

foo <- function(x) {
  if(x < 10) {
    return(NA)
  } else {
    xx <- seq_len(x)
    xx <- cumsum(xx)
  }
  xx ## return(xx) is implied here
}

> foo(5)
[1] 0
> foo(10)
 [1]  1  3  6 10 15 21 28 36 45 55

通过隐含return() ,我的意思是最后一行就好像你已经完成了return(xx) ,但是把call改为return()会稍微高效一些。

有些人认为使用多种返回不良风格; 在长时间的函数中,跟踪函数退出的位置会变得困难或容易出错。 因此,另一种方法是有一个返回点,但使用if () else ()子句更改返回对象。 对foo()进行这样的修改foo()

foo <- function(x) {
  ## out is NA or cumsum(xx) depending on x
  out <- if(x < 10) {
    NA
  } else {
    xx <- seq_len(x)
    cumsum(xx)
  }
  out ## return(out) is implied here
}

> foo(5)
[1] NA
> foo(10)
 [1]  1  3  6 10 15 21 28 36 45 55
链接地址: http://www.djcxy.com/p/24897.html

上一篇: break/exit script

下一篇: How to sort a data frame by date