Skip to content
Prev 181516 / 398502 Next

split strings

Immaterial, yes, but it is always good to test :) and your solution *is* 
faster and it is even faster if you can assume byte strings:

 > strings = sprintf('f:/foo/bar//%s.tif', replicate(1000, 
paste(sample(letters, 10), collapse='')))
 > library(rbenchmark)
 > benchmark(columns=c('test', 'elapsed'), replications=1000, order=NULL,
   'one-pass, perl'=sub('.*//(.*)[.]tif$', '\\1', strings, perl=TRUE),
   'two-pass, perl'=sub('.tif$', '', basename(strings), perl=TRUE),
   'one-pass, no perl'=sub('.*//(.*)[.]tif$', '\\1', strings, perl=FALSE),
   'two-pass, no perl'=sub('.tif$', '', basename(strings), perl=FALSE),
   'fixed'=sub(".tif", "", basename(strings), fixed=TRUE),
   'fixed, bytes'=sub(".tif", "", basename(strings), fixed=TRUE, 
useBytes=TRUE))

               test elapsed
1    one-pass, perl   2.946
2    two-pass, perl   3.858
3 one-pass, no perl  15.884
4 two-pass, no perl   3.788
5             fixed   2.264
6      fixed, bytes   1.813

Allan
Gabor Grothendieck wrote: