用R中的向量替换列表

Gab*_*yLP 4 string replace r gsub

我需要做很多替换.我正在使用gsub.我想知道是否有可能做一些事情,比如当我想用a替换所有é时,用e代替所有é:

gsub(c("á","é"),c("a","e"),"ána belén")
Run Code Online (Sandbox Code Playgroud)

使用这个,我收到一个错误.

如果这是不可能的,还有其他功能吗?

flo*_*del 6

是的,有chartr:

chartr("áé" ,"ae","ána belén")
# [1] "ana belen"
Run Code Online (Sandbox Code Playgroud)

编辑因为你现在要求一个可以处理整个单词的更通用的功能,这就是我要做的:

rgsub <- function(pattern, replacement, x) {
   ARGS <- Map(c, pattern = pattern, replacement = replacement)
   FUN  <- function(x, y) gsub(y[['pattern']], y[['replacement']], x)
   Reduce(FUN, ARGS, x)
} 
Run Code Online (Sandbox Code Playgroud)

为了表明它给出了相同的结果,qdap但速度要快一些:

i <- c("cat", "dog", "mouse")
j <- c("lion", "bulldog", "elephant")
k <- c("cat", "dog", "dog", "mouse", "ant", "mouse")

identical(mgsub(i, j, k), rgsub(i, j, k))
# [1] TRUE

library(microbenchmark)

microbenchmark(mgsub(i, j, k), rgsub(i, j, k))
# Unit: microseconds
#            expr    min       lq   median       uq      max neval
#  mgsub(i, j, k) 586.60 608.6920 629.7840 659.2415 1278.973   100
#  rgsub(i, j, k)  81.91  88.9305  97.0165 107.2390  229.835   100
Run Code Online (Sandbox Code Playgroud)

qdap 对于很多事情来说可能都很棒,但对于你的特定应用来说可能有点过头了.