当遇到r中的特殊字符时,paste0或paste会失败

时间:2014-06-16 13:53:55

标签: r

我有这个字符串。

 temp <- "this is Mapof ttMapof qwqqwMApofRt it"

我必须把它作为输出。

"this is Mapof (Mapof) ttMapof (Mapof) qwqqwMapofRt it"

我这样做:(完美没问题!)

temp <- gsub('Mapof\\b', 'Mapof (Mapof)', temp)        #code line 1

"this is Mapof (Mapof) ttMapof (Mapof) qwqqwMapofRt it"

但问题是我不能直接这样做,因为我必须采取&#39;模式&#39;和&#39;替换&#39;从矢量。因此,在提取出“&#39;模式”之后和&#39;替换&#39;从该向量,我将它们存储为以下

inc_spelling <- "Mapof"     #(pattern)
cor_spelling <- "Map of"    #(replacement)

现在我使用paste()来获取确切的代码行1(上面),但它不会发生。你自己看。这里发生了什么问题?

txt <- paste0("temp <- gsub('",inc_spelling,"\\b','",inc_spelling," (",cor_spelling,")'"," ,temp)")

txt

"temp <- gsub('Mapof\\b','Mapof (Map of)' ,temp)"

eval(parse(text=txt))

temp

"this is Mapof ttMapof qewqeqwMapofdffd it"

失败了!为什么会这样?我无法找出错误!如果这个任务无法通过paste()实现,请提出另一种选择。谢谢!

2 个答案:

答案 0 :(得分:5)

您尝试的解决方案需要更加复杂。您可以将矢量参数直接提供给gsub()

gsub(paste0(inc_spelling, '\\b'), cor_spelling, temp)

或者这不是你想要做的事情吗?

答案 1 :(得分:1)

如果你想使用eval(parse())(专业提示:你不要。调整@MadScone的答案以满足你的需要),你需要更多的逃脱(即,你需要逃脱逃脱原来逃脱的逃脱以及最初的逃脱。你看到它有多疯狂吗?eval(parse())应该避免):

txt <- paste0("temp <- gsub('",inc_spelling,"\\\\b','",
               inc_spelling," (",
               cor_spelling,")'"," ,temp)")
print(eval(parse(text=txt)))
#[1] "this is Mapof (Map of) ttMapof (Map of) qwqqwMApofRt it"