[R] vectorized sub, gsub, grep, etc.

Christos Hatzis christos.hatzis at nuverabio.com
Tue Oct 7 23:06:15 CEST 2008


John,
Try the following:

> mapply(function(p, r, x) sub(p, r, x, fixed = TRUE), p=patt, r=repl, x=X)
   b   cd    a 
"aB" "CD" "ef"  

-Christos

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Thaden, John J
> Sent: Tuesday, October 07, 2008 3:59 PM
> To: r-help at r-project.org
> Cc: jjthaden at flash.net
> Subject: [R] vectorized sub, gsub, grep, etc.
> 
> R pattern-matching and replacement functions are
> vectorized: they can operate on vectors of targets.
> However, they can only use one pattern and replacement.
> Here is code to apply a different pattern and replacement for 
> every target.  My question: can it be done better?
> 
> sub2 <- function(pattern, replacement, x) {
>     len <- length(x)
>     if (length(pattern) == 1) 
>         pattern <- rep(pattern, len)
>     if (length(replacement) == 1) 
>         replacement <- rep(replacement, len)
>     FUN <- function(i, ...) {
>         sub(pattern[i], replacement[i], x[i], fixed = TRUE)
>     }
>     idx <- 1:length(x)
>     sapply(idx, FUN)    
> }
> 
> #Example
> X <- c("ab", "cd", "ef")
> patt <- c("b", "cd", "a")
> repl <- c("B", "CD", "A")
> sub2(patt, repl, X)
> 
> -John
> 
> Confidentiality Notice: This e-mail message, including 
> a...{{dropped:8}}
> 
> ______________________________________________
> R-help at 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.
> 
>



More information about the R-help mailing list