On 21.06.2008, at 17:25, Marc Schwartz wrote:
on 06/21/2008 09:18 AM Gabor Grothendieck wrote:
On Sat, Jun 21, 2008 at 8:31 AM, Wacek Kusnierczyk
<[EMAIL PROTECTED]> 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)

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

I may have missed this one in the thread someplace, but I did not note any solutions based upon using strsplit(). So:

> sapply(strsplit(xxx, split = "/"),
         function(x) as.numeric(x[1]) / as.numeric(x[2]))
[1] 0.50 0.25
or
> apply(sapply(strsplit(xxx, split = "/"), as.numeric),
        2, function(x) x[1] / x[2])
[1] 0.50 0.25

OK. Here is an other one:
* for UNIX/Mac and it's meant funnily [to rest R ;) ]

sapply(as.list(xxx),
function(x) as.numeric(system(paste("echo 'scale=10;",x,"'| bc",sep=''), intern=T)))

--Hans

______________________________________________
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.

Reply via email to