Hi, Luckily for me - until now i did not have too many times to do these type of parsing - but who knows??? Up to now i was pretty happy with strsplit .....Anyway - thanks again for all the help, i really appreciate it. Monica
---------------------------------------- > From: ggrothendi...@gmail.com > Date: Tue, 26 May 2009 16:40:21 -0400 > Subject: Re: [R] split strings > To: waclaw.marcin.kusnierc...@idi.ntnu.no > CC: pisican...@hotmail.com; r-help@r-project.org > > Although speed is really immaterial here this is likely > to be faster than all shown so far: > > sub(".tif", "", basename(metr_list), fixed = TRUE) > > It does not allow file names with .tif in the middle > of them since it will delete the first occurrence rather > than the last but such a situation is highly unlikely. > > > On Tue, May 26, 2009 at 4:24 PM, Wacek Kusnierczyk > wrote: >> Monica Pisica wrote: >>> Hi everybody, >>> >>> Thank you for the suggestions and especially the explanation Waclaw >>> provided for his code. Maybe one day i will be able to wrap my head around >>> this. >>> >>> Thanks again, >>> >> >> you're welcome. note that if efficiency is an issue, you'd better have >> perl=TRUE there: >> >> output = sub('.*//(.*)[.]tif$', '\\1', input, perl=TRUE) >> >> with perl=TRUE, the one-pass solution is somewhat faster than the >> two-pass solution of gabor's -- which, however, is probably easier to >> understand; with perl=FALSE (the default), the performance drops: >> >> 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)) >> # 1 one-pass, perl 3.391 >> # 2 two-pass, perl 4.944 >> # 3 one-pass, no perl 18.836 >> # 4 two-pass, no perl 5.191 >> >> vQ >> >> >>> >>> Monica >>> >>> ---------------------------------------- >>> >>>> Date: Tue, 26 May 2009 15:46:21 +0200 >>>> From: waclaw.marcin.kusnierc...@idi.ntnu.no >>>> To: pisican...@hotmail.com >>>> CC: r-help@r-project.org >>>> Subject: Re: [R] split strings >>>> >>>> Monica Pisica wrote: >>>> >>>>> Hi everybody, >>>>> >>>>> I have a vector of characters and i would like to extract certain parts. >>>>> My vector is named metr_list: >>>>> >>>>> [1] "F:/Naval_Live_Oaks/2005/data//BE.tif" >>>>> [2] "F:/Naval_Live_Oaks/2005/data//CH.tif" >>>>> [3] "F:/Naval_Live_Oaks/2005/data//CRR.tif" >>>>> [4] "F:/Naval_Live_Oaks/2005/data//HOME.tif" >>>>> >>>>> And i would like to extract BE, CH, CRR, and HOME in a different vector >>>>> named "names.id" >>>>> >>>> one way that seems reasonable is to use sub: >>>> >>>> output = sub('.*//(.*)[.]tif$', '\\1', input) >>>> >>>> which says 'from each string remember the substring between the >>>> rigthmost two slashes and a .tif extension, exclusive, and replace the >>>> whole thing with the captured part'. if the pattern does not match, you >>>> get the original input: >>>> >>>> sub('.*//(.*)[.]tif$', '\\1', 'f:/foo/bar//buz.tif') >>>> # buz >>>> >>>> vQ >>>> >>> _________________________________________________________________ >> >> ______________________________________________ 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.