[R] lapply, strsplit, and list elements

Greg Snow Greg.Snow at imail.org
Fri Feb 4 21:41:20 CET 2011


Darn,  Good catch, I fell victim to overthinking the problem.

I think I was more thinking of:
'[0-9]+(?=/)'

Which uses the whole match (then I switched thinking and captured the number, but did not simplify the other part).  Yours is the best.

-- 
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111


> -----Original Message-----
> From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> Sent: Friday, February 04, 2011 12:22 PM
> To: Greg Snow
> Cc: Dick Harray; r-help at r-project.org
> Subject: Re: [R] lapply, strsplit, and list elements
> 
> On Fri, Feb 4, 2011 at 1:27 PM, Greg Snow <Greg.Snow at imail.org> wrote:
> > Try this:
> >
> >> x <- c("349/077,349/074,349/100,349/117",
> > +          "340/384.2,340/513,367/139,455/128,D13/168",
> > +          "600/437,128/903,128/904")
> >>
> >> library(gsubfn)
> >> out <- strapply(x, '([0-9]+)(?=/)')
> >> out
> > [[1]]
> > [1] "349" "349" "349" "349"
> >
> > [[2]]
> > [1] "340" "340" "367" "455" "13"
> >
> > [[3]]
> > [1] "600" "128" "128"
> >
> >
> > The strapply looks for the pattern then returns every time it finds
> the pattern.  The pattern in this case is 1 or more digits that are
> followed by a /, but the slash is not included in the matched portion
> (a positive look ahead).
> >
> > If you need more than digits you can modify the pattern to whatever
> matches before the /.
> 
> Also this similar approach with a slight simplification of the regular
> expression:
> 
>    strapply(x, '([0-9]+)/')
> 
> or to convert the numbers to numeric at the same time:
> 
>    strapply(x, '([0-9]+)/', as.numeric)
> 
> 
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com



More information about the R-help mailing list