[R] how to skip last lines while reading the data in R

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Mon Jan 28 13:28:49 CET 2008


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.



More information about the R-help mailing list