Regex 正则表达式R在带括号的替换向量中替换
假设我有一个像这样的字符串Regex 正则表达式R在带括号的替换向量中替换,regex,r,Regex,R,假设我有一个像这样的字符串x x <- "CTTTANNNNNNNYG" 我尝试过使用mapply(gsub,a,b,x)和str_replace(),但没有效果。任何帮助都将不胜感激。我们可以使用library(qdap) 如果您想用基函数实现这一点,基本上需要按顺序进行每个替换(gsub不是以这种方式矢量化的)。这里有一种方法 Reduce( function(x, replace) { gsub(replace$pattern, replace$value,
x
x <- "CTTTANNNNNNNYG"
我尝试过使用
mapply(gsub,a,b,x)
和str_replace()
,但没有效果。任何帮助都将不胜感激。我们可以使用library(qdap)
如果您想用基函数实现这一点,基本上需要按顺序进行每个替换(
gsub
不是以这种方式矢量化的)。这里有一种方法
Reduce(
function(x, replace) {
gsub(replace$pattern, replace$value, x)
},
Map(function(a,b) list(pattern=a, value=b), a, b),
init=x
)
# [1] "CTTTA(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(C|T)G"
我们使用Map
生成成对的匹配/替换值,然后使用Reduce
将它们依次应用于字符串,因为替换是“固定的”,并且只涉及每个字母,所以您可以在不使用regex
或任何附加包的情况下获得相同的结果。例如:
vapply(strsplit(x,"",fixed=TRUE),function(z) paste(setNames(b,a)[z],collapse=""),"")
#[1] "CTTTA(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(C|T)G"
可能重复的
library(qdap)
mgsub(a, b, x)
#[1] "CTTTA(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(C|T)G"
Reduce(
function(x, replace) {
gsub(replace$pattern, replace$value, x)
},
Map(function(a,b) list(pattern=a, value=b), a, b),
init=x
)
# [1] "CTTTA(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(C|T)G"
vapply(strsplit(x,"",fixed=TRUE),function(z) paste(setNames(b,a)[z],collapse=""),"")
#[1] "CTTTA(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(A|C|G|T)(C|T)G"