[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