Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are examples of when seq_along works, but seq produces unintended results?

Tags:

r

seq

What are good examples of when seq_along will work, but seq will produce unintended results?

From the documentation of ?seq we have:

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 seq_along in that case.

like image 851
Ricardo Saporta Avatar asked Dec 05 '12 20:12

Ricardo Saporta


People also ask

What is the difference between SEQ and Seq_along?

seq_along produces the vector of indices of a given vector. seq_len produces the sequence of integer numbers from 1 to length. out.

What is Seq_along?

seq_along() is a function that creates a vector that contains a sequence of numbers from 1 to the length of the object. In this case the object is the vector c , which has a length of 6 elements.

What is Seq_len in R?

seq_len() function in R Language is used to generate a sequence from 1 to the specified number.


2 Answers

This should make the difference clear. Basically, seq() acts like seq_along() except when passed a vector of length 1, in which case it acts like seq_len(). If this ever once bites you, you'll never use seq() again!

a <- c(8, 9, 10) b <- c(9, 10) c <- 10  seq_along(a) # [1] 1 2 3 seq_along(b) # [1] 1 2 seq_along(c) # [1] 1  seq(a) # [1] 1 2 3 seq(b) # [1] 1 2 seq(c) # [1]  1  2  3  4  5  6  7  8  9 10 

It's probably worth noting that sample() exhibits similarly crummy behavior:

sample(a) # [1] 10  8  9 sample(b) # [1]  9 10 sample(c) # [1]  8  7  9  3  4  1  6 10  2  5 
like image 107
Josh O'Brien Avatar answered Sep 19 '22 13:09

Josh O'Brien


If the input to seq is length 1 then the outputs between seq and seq_along will be different

x <- 5 for(i in seq(x)){     print(x[i]) } #[1] 5 #[1] NA #[1] NA #[1] NA #[1] NA  for(i in seq_along(x)){     print(x[i]) } #[1] 5 

We also see a difference if the input is a vector of Dates

x <- Sys.Date() + 1:5 seq(x) #Error in seq.Date(x) : 'from' must be of length 1 seq_along(x) #[1] 1 2 3 4 5 
like image 42
Dason Avatar answered Sep 19 '22 13:09

Dason