假设我有一个字符串x
,就像这样。
x <- "CTTTANNNNNNNYG"
我想用不同长度的字符串替换x中的每个字母。
a <- c("A","C","G","T","W","S","M","K","R","Y","B","D","H","V","N")
b <- c("A","C","G","T","(A|T)","(C|G)","(A|C)","(G|T)","(A|G)","(C|T)","(C|G|T)","(A|G|T)","(A|C|T)","(A|C|G)","(A|C|G|T)")
如果我想将向量a中的字母替换为向量b中的对应字母,我会想要将字符串x操作为:
"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"
我尝试使用mapply(gsub, a,b,x)
和str_replace()
无济于事。任何帮助将不胜感激。
答案 0 :(得分:4)
我们可以使用mgsub
library(qdap)
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"
答案 1 :(得分:4)
由于替换是&#34;固定&#34;并且只涉及一个字母,您可以实现相同的结果,而不使用$('.grindpost a').each(function(e){
$(this).click(function(e){
if ($(this).closest('.grindpost').css('opacity') != 1) { e.preventDefault(); return false; }
});
});
或任何其他包。例如:
regex
答案 2 :(得分:2)
如果您想使用基本函数执行此操作,则需要基本上按顺序执行每个替换(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