R:GSUB在替换字符上循环

R:GSUB在替换字符上循环,r,gsub,R,Gsub,我试图用gsub替换一个字符串中的几个字符串。 在一般情况下,gsub(pattern,replacement,x)采用字符向量x,但pattern和replacement都假定为字符或正则表达式。模式和替换不能是字符向量 我可以使用循环粗略地实现这一点,但在我的例子中,模式和替换都是长向量,所以如果可能的话,我希望实现“向量化” 我目前的执行情况如下: strs<-"apples.in.bed" replace.vect<-c("a","e","i") ne

我试图用gsub替换一个字符串中的几个字符串。 在一般情况下,gsub(pattern,replacement,x)采用字符向量x,但pattern和replacement都假定为字符或正则表达式。模式和替换不能是字符向量

我可以使用循环粗略地实现这一点,但在我的例子中,模式和替换都是长向量,所以如果可能的话,我希望实现“向量化”

我目前的执行情况如下:

    strs<-"apples.in.bed"
    replace.vect<-c("a","e","i")
    new.char.vect<-c("1","2","3")
    temp <- strs
    for(i in 1:length(replace.vect)){
      temp<-gsub(replace.vect[i], new.char.vect[i],temp)
    }

    # temp: "1ppl2s.3n.b2d"

strs您可以尝试Hmisc库中的sedit函数

library(Hmisc)
sedit(text = strs, replace.vect, new.char.vect)
#[1] "1ppl2s.3n.b2d"

现在已将其更改为使用不同的功能。希望这就是您所寻找的。这不会比
chartr
更好。在
replace上尝试此操作。vect@DavidArenburg我同意你的观点,认为sedit不比for循环好多少,不过你能扩展一下你的第一点吗?根据您所说的要返回的输出,您希望
new.char.vectOP希望结果为
(a)ppl2s.(a)r2.b(a)d
。你看不到被删除的帖子,但我已经用
chartr
提出了解决方案,OP发表了这条评论。
library(Hmisc)
sedit(text = strs, replace.vect, new.char.vect)
#[1] "1ppl2s.3n.b2d"