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) >>> >>> >>> , but as.numeric didn't work for me. Could anyone give me a hint >>> please? >> >> 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 ______________________________________________ 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.