break/exit script

前端 未结 8 1366
Happy的楠姐
Happy的楠姐 2021-01-30 15:22

I have a program that does some data analysis and is a few hundred lines long.

Very early on in the program, I want to do some quality control and if there is not enou

8条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-30 16:05

    Edit: Seems the OP is running a long script, in that case one only needs to wrap the part of the script after the quality control with

    if (n >= 500) {
    
    .... long running code here
    
    }
    

    If breaking out of a function, you'll probably just want return(), either explicitly or implicitly.

    For example, an explicit double 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
    

    By return() being implied, I mean that the last line is as if you'd done return(xx), but it is slightly more efficient to leave off the call to return().

    Some consider using multiple returns bad style; in long functions, keeping track of where the function exits can become difficult or error prone. Hence an alternative is to have a single return point, but change the return object using the if () else () clause. Such a modification to foo() would be

    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
    

提交回复
热议问题