Search code examples
rfunctionvectorsubsetsequence

R omit last element in sequence


When we want a sequence in R, we use either construction:

> 1:5
[1] 1 2 3 4 5
> seq(1,5)
[1] 1 2 3 4 5

this produces a sequence from start to stop (inclusive) is there a way to generate a sequence from start to stop (exclusive)? like

[1] 1 2 3 4 

Also, I don't want to use a workaround like a minus operator, like:

seq(1,5-1)

This is because I would like to have statements in my code that are elegant and concise. In my real world example the start and stop are not hardcoded integers but descriptive variable names. Using the variable_name -1 construction just my script uglier and difficult to read for a reviewer.

PS: The difference between this question and the one at remove the last element of a vector is that I am asking for sequence generation while the former focuses on removing the last element of a vector Moreover the answers provided here are different and relevant to my problem


Solution

  • We can use the following function

    f <- function(start, stop, ...) {
      if(identical(start, stop)) {
        return(vector("integer", 0))
      }
      seq.int(from = start, to = stop - 1L, ...)
    }
    

    Test

    f(1, 5)
    # [1] 1 2 3 4
    
    f(1, 1)
    # integer(0)