mtext - text in r
¿Cómo puedo acelerar las búsquedas de texto en R? (2)
Tengo un vector de texto grande Me gustaría buscar un personaje o frase en particular. Las expresiones regulares están tomando para siempre. ¿Cómo lo busco rápidamente?
Data de muestra:
R <- 10^7
garbage <- replicate( R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse="") )
No hay necesidad de expresiones regulares aquí, y su poder viene con un costo computacional.
Puede desactivar el análisis de expresiones regulares en cualquiera de las funciones de expresiones regulares en R con el argumento ,fixed=TRUE
. Resultado de ganancias de velocidad:
library(microbenchmark)
m <- microbenchmark(
grep( " ", garbage, fixed=TRUE ),
grep( " ", garbage )
)
m
Unit: milliseconds
expr min lq median uq max neval
grep(" ", garbage, fixed = TRUE) 491.5634 497.1309 499.109 503.3009 1128.643 100
grep(" ", garbage) 1786.8500 1801.9837 1810.294 1825.2755 3620.346 100
Si necesita expresiones regulares, generalmente puede obtener un aumento en el rendimiento sobre el motor de expresiones regulares predeterminado utilizando la biblioteca PCRE (estableciendo perl=TRUE
). Hay otros consejos de rendimiento en ?grep
:
Consideraciones de rendimiento:
Si realiza una gran cantidad de coincidencias de expresiones regulares, incluso en cadenas muy largas, deberá considerar las opciones utilizadas. En general, PCRE será más rápido que el motor de expresión regular predeterminado, y ''fijo = VERDADERO'' aún más rápido (especialmente cuando cada patrón se combina solo unas pocas veces).
Si está trabajando en una configuración regional de un solo byte y tiene cadenas UTF-8 marcadas que son representables en esa configuración regional, conviértalas primero porque una sola cadena UTF-8 obligará a que todo el emparejamiento se realice en Unicode, lo que atrae una penalización de alrededor de 3 veces para el modo POSIX 1003.2 predeterminado.
Si puede utilizar ''useBytes = TRUE'', las cadenas no se verificarán antes de la coincidencia, y la coincidencia real será más rápida. A menudo, la coincidencia basada en bytes basta en un entorno local UTF-8 ya que los patrones de bytes de un carácter nunca coinciden con una parte de otro.