Regex 微基准R和三个关于字符串模式替换的包

Regex 微基准R和三个关于字符串模式替换的包,regex,r,benchmarking,Regex,R,Benchmarking,我的问题是我的方法和结论是否正确 作为学习正则表达式的一部分,我想找出学习各种可选方法(base R和包)的顺序。我认为这可能有助于了解替代函数的相对速度。所以,我创建了一个字符串向量并调用了我希望是等价表达式的东西 sites <- c("http://grand.test.com/", "https://example.com/", "http://.big.time.bhfs.com/", "http://test.blogs.mvalaw.com/") v

我的问题是我的方法和结论是否正确

作为学习正则表达式的一部分,我想找出学习各种可选方法(base R和包)的顺序。我认为这可能有助于了解替代函数的相对速度。所以,我创建了一个字符串向量并调用了我希望是等价表达式的东西

sites <- c("http://grand.test.com/", "https://example.com/",  
           "http://.big.time.bhfs.com/", "http://test.blogs.mvalaw.com/")
vec <- rep(x = sites, times = 1000) # creating a longish vector

base <- gsub("http:", "", vec, perl = TRUE)
stringr <- str_replace_all(vec, "http:", replacement = "")
stringi <- stri_replace_all_regex(str = vec, pattern = "http:", replacement = "")
qdap <- genX(text.var = vec, "http:", "")
基本R
gsub
是迄今为止最快的(我缩短了expr名称),我说的对吗


中位数时间非常明显不同,尤其是对于
qdap

,这些函数各有其用途。但是,如果您查看
str\u replace\u all
的帮助文件,您会发现它链接并包装了
gsub
,这意味着它在某个时候调用了
gsub
。在这种情况下,
gsub
很可能是最快的,因为它调用了一个
.Internal
函数,该函数由C代码和R代码组成。调用
.Internal
或是
.Primitive
的函数通常是最快的,因为内部C代码有几个旁注
sub
gsub
稍微快一点,看起来在这里就足够了。请注意,“http:”与“https:”不匹配。您可以将模式更改为“https:”,以选择性地包含sAlso注意,在本例中,使用
fixed=TRUE
而不是
perl=TRUE
会使
gsub
更快(在我的机器上仅0.7毫秒。但速度更快)。您在这里使用
qdap
让我惊讶的是,它居然工作了
genX
用于删除两个标记之间的项(因此是
left
right
参数)。该函数旨在减少使用正则表达式的编程时间,而不是计算时间,作为基本函数的包装器,我希望它无论如何都会变慢。无论如何,如果
gsub
(或
stringi
/
stringr
软件包)更适合执行某项任务,我不会使用
genX
。@律师,我不能代表软件包的作者说话,只能从
stringr
描述文件:描述:stringr是一组简单的包装器,使R的字符串函数更一致、更简单、更易于使用。它通过确保:函数和参数名称(和位置)一致,所有函数适当处理NA和零长度字符,每个函数的输出数据结构与其他函数的输入数据结构匹配来实现此目的。”
test <- microbenchmark(base <- gsub("http:", "", vec, perl = TRUE),
                      stringr <- str_replace_all(vec, "http:", replacement = ""),
                      stringi <- stri_replace_all_regex(str = vec, pattern = "http:", replacement = ""),
                      qdap <- genX(text.var = vec, "http:", ""),
                      times = 100)
 expr        min         lq
 base    1.697001   1.739393
 stringr 3.814348   3.928360
 stringi 5.888857   6.172212
 qdap 120.670037 124.624946
     median         uq        max neval
   1.765051   1.833770   2.976780   100
   3.979453   4.123138   7.032091   100
   6.276407   6.500412   7.634943   100
 127.493293 130.923663 173.155253   100