Я пытаюсь подсчитать количество не буквенно-цифровых символов для каждой строки в векторе из 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 или интерфейсов (например, reticulate, Rcpp).