A couple days ago, Mark Leeds asked about a solution that would  
basically stagger two lists, a and b, to return a list in the form of  
a[1], b[1], a[2], b[2], a[3]....  In particular, the summary of his  
question was in reference to lists defined by

  x <- 5
  tempin <- seq(1,1411, by=30)
  a <- tempin
  b <- tempin + x

I offered the following function

  everyOther <- function(tempin, x){
        tempout <- array(data=NA, dim=length(tempin)*2)
        tempout[seq(1,length(tempin)*2, by=2)]<-tempin
        tempout[seq(2,length(tempin)*2, by=2)]<-tempin+x
        tempout
  }

which did what it was supposed to, and Gavin Simpson offered a  
similar function.  Peter Dalgaard, however, supplied a much more  
elegant solution:

  c(rbind(tempin,tempin+5))

or

  rep(tempin, each=2) + c(0,5)

I thought I'd bring this up as a new topic because it's really no  
longer related to what Mark first asked, but is there a way, perhaps  
from the documentation, that a user would know that c() and lists in  
general behave as they do in these two lines?  Or would we just need  
to dig into the code?

I am reminded of quote by Byron Ellis: "Contrary to popular belief  
the speed of R's interpreter is rarely the limiting factor to R's  
speed. People treating R like C is typically the limiting factor. You  
have vector operations, USE THEM."  Not exactly the point, but close.

Thanks!

Jeff Spies
http://www.nd.edu/~jspies/


        [[alternative HTML version deleted]]

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to