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"
我的部分数据:
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"