Sequence Generation

Generate regular sequences. seq is a standard generic with a default method. is a primitive which can be much faster but has a few restrictions. seq_along and seq_len are very fast primitives for two common cases.


# S3 method for default seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)), length.out = NULL, along.with = NULL, …), to, by, length.out, along.with, …)

seq_along(along.with) seq_len(length.out)

arguments passed to or from methods.
from, to
the starting and (maximal) end values of the sequence. Of length 1 unless just from is supplied as an unnamed argument.
number: increment of the sequence.
desired length of the sequence. A non-negative number, which for seq and will be rounded up if fractional.
take the length from the length of this argument.

Numerical inputs should all be finite (that is, not infinite, NaN or NA). The interpretation of the unnamed arguments of seq and is not standard, and it is recommended always to name the arguments when programming. seq is generic, and only the default method is described here. Note that it dispatches on the class of the first argument irrespective of argument names. This can have unintended consequences if it is called with just one argument intending this to be taken as along.with: it is much better to use seg_along in that case. is an internal generic which dispatches on methods for "seq" based on the class of the first supplied argument (before argument matching). Typical usages are

seq(from, to)
seq(from, to, by= )
seq(from, to, length.out= )
seq(along.with= )
seq(length.out= )
The first form generates the sequence from, from+/-1, …, to (identical to from:to). The second form generates from, from+by, …, up to the sequence value less than or equal to to. Specifying to - from and by of opposite signs is an error. Note that the computed final value can go just beyond to to allow for rounding error, but is truncated to to. (‘Just beyond’ is by up to \(10^{-10}\) times abs(from - to).) The third generates a sequence of length.out equally spaced values from from to to. (length.out is usually abbreviated to length or len, and seq_len is much faster.) The fourth form generates the integer sequence 1, 2, …, length(along.with). (along.with is usually abbreviated to along, and seq_along is much faster.) The fifth form generates the sequence 1, 2, …, length(from) (as if argument along.with had been specified), unless the argument is numeric of length 1 when it is interpreted as 1:from (even for seq(0) for compatibility with S). Using either seq_along or seq_len is much preferred (unless strict S compatibility is essential). The final form generates the integer sequence 1, 2, …, length.out unless length.out = 0, when it generates integer(0). Very small sequences (with from - to of the order of \(10^{-14}\) times the larger of the ends) will return from. For seq (only), up to two of from, to and by can be supplied as complex values provided length.out or along.with is specified. More generally, the default method of seq will handle classed objects with methods for the Math, Ops and Summary group generics., seq_along and seq_len are primitive.

Value and the default method of seq for numeric arguments return a vector of type "integer" or "double": programmers should not rely on which. seq_along and seq_len return an integer vector, unless it is a long vector when it will be double.


Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

See Also

The methods seq.Date and seq.POSIXt. :, rep, sequence, row, col.

  • seq
  • seq.default
  • seq_along
  • seq_len
library(base) seq(0, 1, length.out = 11) seq(stats::rnorm(20)) # effectively 'along' seq(1, 9, by = 2) # matches 'end' seq(1, 9, by = pi) # stays below 'end' seq(1, 6, by = 3) seq(1.575, 5.125, by = 0.05) seq(17) # same as 1:17, or even better seq_len(17)
Documentation reproduced from package base, version 3.4.0, License: Part of R 3.4.0

Community examples at Jan 17, 2017 base v3.3.2

`seq_len()` creates a sequence from 1 to n. ```{r} seq_len(17) # same as 1:17 ``` Its main advantage is that it behaves more intuitively when n is zero. ```{r} seq_len(0) 1:0 # Not the same! ``` `seq_along()` creates a sequence from 1 to the length of the input. ```{r} seq_along( ``` This is really useful for [`for`]( loops. ```{r} for(i in seq_along( { print([i]) } ``` `` creates a sequence from one number to another. ```{r}, 3.25) ``` You can pass a `by` argument to specify the step size. ```{r}, 3.25, by = 0.5) ``` The `by` argument doesn't have to exactly divide the range of the sequence. ```{r}, 3.25, by = pi / 4) ``` If you get the sign of the `by` argument wrong, `` will throw an error. ```{r} tryCatch(, 3.25, by = -1), error = print ) ``` Alternatively you can pass a `length.out` argument to specify the length of the output. ```{r}, 3.25, length.out = 21) ``` Or you can specify an `along.with` argument to specify the length of the output in a different way. ```{r}, 3.25, along.with = ``` `seq()` combines the functionality of the three previously mentioned functions into one. By only remembering this one function, you save on brain-memory at a cost of some run-time performance and a more complicated interface. Pass only a single number, and `seq()` behaves like `seq_len()`. ```{r} seq(17) ``` But looks what happens when you pass it zero. ```{r} seq(0) ``` Pass only a vector, and it behaves like `seq_along()`. ```{r} seq( ``` Multi-argument uses behave like ``. ```{r} seq(-1.75, 3.25, by = 0.5) seq(-1.75, 3.25, length.out = 21) seq(-1.75, 3.25, along.with = ```