[R] Convert character string to number

Gabor Grothendieck ggrothendieck at gmail.com
Sat Jun 21 16:18:37 CEST 2008

```On Sat, Jun 21, 2008 at 8:31 AM, Wacek Kusnierczyk
<Waclaw.Marcin.Kusnierczyk at idi.ntnu.no> wrote:
> Hans-Jörg Bibiko wrote:
>>
>> On 21.06.2008, at 01:36, Ken Liu wrote:
>>> I would like to convert a character vector
>>>
>>> xxx <- c("1/2", "1/4")
>>>
>>> to
>>>
>>> yyy <- c(0.5, 0.25)
>>>
>>>
>>> , but as.numeric didn't work for me.  Could anyone give me a hint
>>
>> There are many many ways, and they're depending on the structure of
>> xxx. If you only have such fractions you can use this naïve approach:
>>
>> as.numeric( gsub("(\\d+)/(\\d+)", "\\1", xxx, perl=T) ) / as.numeric(
>> gsub("(\\d+)/(\\d+)", "\\2", xxx, perl=T) )
>
> or:
>
> library(gsubfn)
> as.numeric(
>    gsubfn("([0-9]+)/([0-9]+)",
>    numerator+denominator~as.numeric(numerator)/as.numeric(denominator),
>    xxx, backref=-2)
> )

strapply, also in the gsubfn package, could be used here in a similar way too:

> library(gsubfn)
> strapply(xxx, "([0-9]+)/([0-9]+)", ~ as.numeric(x) / as.numeric(y), backref = -2, simplify = c)
[1] 0.50 0.25

or

> fn\$sapply(strapply(xxx, "[0-9]+", as.numeric), ~ x[1]/x[2])
[1] 0.50 0.25

```