R:mapply(gsub...) 给出的结果与 gsub(...) 不同

R: mapply(gsub...) gives different results than gsub(...)

我的部分数据:

data <- c('googel', 'googele', 'googl', 'google .de', 'google kalender',
        'google maps', 'google.ch', 'www.google.ch', 'factbook', 'facebock',
        'facebok', 'facebook', 'facebook.ch', 'facebook.com', 'facebook.de', 'facebooke')

我必须用 'Google' 替换所有类似 google 的词,用 'Facebook' 替换所有类似 facebook 的词。我可以使用以下代码执行此操作:

### Google coding
> google <- gsub(pattern = '.*go.*g.*l.*', replacement = 'Google', data)

### Facebook coding
> fbGoogle <- gsub(pattern = '.*fa.*bo.*k.*', replacement = 'Facebook', google)
> plyr::count(fbGoogle)
         x freq
1 Facebook    8
2   Google    8

我想使用 mapply 来完成这项工作,mapply 是一种用于模式的向量,另一种用于替换。尽管我使用相同的(很原始,我知道)正则表达式,但我得到的结果与以前不同:

> ### Google and Facebook togeter
> patterns <- c('.*go.*g.*l.*', '.*fa.*bo.*k.*')
> replacements <- c('Google', 'Facebook')
> fbGoogleFail <- mapply(gsub, patterns, replacements, data)
> plyr::count(fbGoogleFail)
               x freq
1        facebok    1
2       Facebook    4
3    facebook.ch    1
4    facebook.de    1
5       factbook    1
6        googele    1
7         Google    4
8     google .de    1
9    google maps    1
10 www.google.ch    1

我在这里失败的想法?非常感谢任何帮助。

试试这个

gsubv <- Vectorize(function(pat,repl,data) gsub(pattern = pat,replacement = repl,x = data),vectorize.args = c("pat","repl"))
output <- gsubv(pat = patterns,repl = replacements,data = data)
output[-match(data,output)]
#[1] "Google"   "Google"   "Google"   "Google"   "Google"   "Google"   "Google"  
#[8] "Google"   "Facebook" "Facebook" "Facebook" "Facebook" "Facebook" "Facebook"
#[15] "Facebook" "Facebook"