Henrique Dallazuanna wrote:
> Perhaps:
> 
> data <- read.table(textConnection(rev(rev(readLines('data.txt'))[-(1:2)])))
> 

  Euurgh! Am I the only one whose sense of aesthetics is enraged by 
this? To get rid of the last two items you reverse the vector, remove 
the first two items, then reverse the vector again?

  One liners are fine for R Golf games, but in the real world, I'd get 
the length of the vector and cut directly off the end. Consider these:

# reverse/trim/reverse:
rev1 <- function(x,n=100,m=5){
   for(i in 1:n){
     y=rev(rev(x)[-(1:m)])
   }
   return(y)
}

# get length, trim
rev2 <- function(x,n=100,m=5){
   for(i in 1:n){
     y=x[1:(length(x)-m)]
   }
   return(y)
}

  > system.time(rev1(1:1000,10000,5))
  [1] 1.864 0.008 2.044 0.000 0.000
  > system.time(rev2(1:1000,10000,5))
  [1] 0.384 0.008 0.421 0.000 0.000


  Result: faster, more directly readable code.

______________________________________________
R-help@r-project.org 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