R 如何有效地进行字符串的成对替换

R 如何有效地进行字符串的成对替换,r,R,我有一个系数名称列表,我想用更好的标签替换技术术语。 函数调用如下所示 replace.pairwise(list("coef1","coef2"), coef1="price",coef2="eventdummy", coef3="income") 而且应该回来 "price" "eventdummy" 对我有效的功能是 replace.pairwise=function(listofstrings,...){ ss=c(unlist(lis

我有一个系数名称列表,我想用更好的标签替换技术术语。 函数调用如下所示

replace.pairwise(list("coef1","coef2"),
                 coef1="price",coef2="eventdummy", coef3="income")
而且应该回来

"price"      "eventdummy"

对我有效的功能是

replace.pairwise=function(listofstrings,...){
  ss=c(unlist(listofstrings))
  pairs=list(...)

  for(s in 1:length(ss)){
    for(p in 1:length(pairs)){
      ss[s]=gsub(names(pairs)[p],pairs[p],ss[s])
    }  
  }
  ss
}

我相信这不是最有效的方法,但它是有效的。我想知道我是否再次编程了一些已经隐藏在R中的许多包中的东西。

这很容易。将翻译存储在命名向量中:

translations <- c(coef1 = "price", coef2 = "eventdummy", coef3 = "income")
如您所见,输出也是一个命名向量。如果名称对您来说是个问题,您只需执行
取消名称(翻译[vector.of.strings])

另外,如果您的原始姓名在示例中所示的列表中,则您已经知道
未列出

translations[unlist(list.of.strings)]
重要提示:如果您的所有原始姓名都有替换名,则上述所有内容都可以正常工作。如果情况并非如此,并且您只想修改有替换项的名称,则可以执行以下操作:

ifelse(is.na(translations[vector.of.strings]),
       vector.of.strings,
       translations[vector.of.strings])

gsub
如果您使用的是精确匹配,那么它肯定是过度杀伤力(甚至可能是错误的)。例如,首选
==
ifelse(is.na(translations[vector.of.strings]),
       vector.of.strings,
       translations[vector.of.strings])