除了计算R中100,000个短字符串的特殊字符之外,还有没有更快的选择?

时间:2019-04-04 15:51:44

标签: r purrr stringr

我试图计算100,000个字符串的向量中每个字符串的非字母数字字符的数量。我发现我目前的执行速度要慢一些。

我当前的实现使用purrr::map()来映射一个自定义函数,该自定义函数在向量中的每个字符串上使用stringr包。

library(dplyr)
library(stringr)
library(purrr)

# custom function that accepts string input and counts the number 
# of non-alphanum characters
count_non_alnum <- function(x) {
  stringr::str_detect(x, "[^[:alnum:] ]") %>% sum()
}

# character vector of length 100K
vec <- rep("Hello. World.", 100000)  

# tokenize individual characters for each string
vec_tokens <- purrr::map(vec, function(x) {
  stringr::str_split(x, "") %>% unlist()
})

# count non-alphanum characters
purrr::map(vec_tokens, count_non_alnum)

# Time difference of 1.048214 mins



sessionInfo()
# R version 3.4.3 (2017-11-30)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 7 x64 (build 7601) Service Pack 1

我的模拟始终需要大约1分钟才能完成。我没有太多期望的基础,但是我希望有更快的选择。我愿意接受其他R包或接口(例如网状,Rcpp)。

1 个答案:

答案 0 :(得分:2)

基本的R功能要快得多。这是一个ElasticityPrice = (%ΔQuantity/%ΔPrice) 解决方案以及4种不同的调用这两个函数的方式。

sum/grepl

enter image description here