큰 문자 벡터가있어서 특정 문자 나 문구를 검색하고 싶습니다. 정규 표현식은 영원히 계속되고 있습니다. 어떻게 빨리 검색합니까?R에서 텍스트 검색 속도를 높이려면 어떻게합니까?
샘플 데이터 :이 정규 표현식 필요가 여기에없고,
R <- 10^7
garbage <- replicate(R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse=""))
큰 문자 벡터가있어서 특정 문자 나 문구를 검색하고 싶습니다. 정규 표현식은 영원히 계속되고 있습니다. 어떻게 빨리 검색합니까?R에서 텍스트 검색 속도를 높이려면 어떻게합니까?
샘플 데이터 :이 정규 표현식 필요가 여기에없고,
R <- 10^7
garbage <- replicate(R, paste0(sample(c(letters[1:5]," "),10,replace=TRUE),collapse=""))
. 다른 성능 팁 ?grep
에 있습니다
성능 고려 사항 :
당신이 매우 긴 문자열을 포함하는 정규 표현식 매칭을 많이하고 있다면, 당신은 사용되는 옵션을 고려해야 할 것입니다. 일반적으로 PCRE는 기본 정규 표현식 엔진보다 빠르며 'fixed = TRUE'가 더 빠릅니다 (특히 각 패턴 이 몇 번 일치하는 경우).
먼저 변환 로 한 UTF-8 문자열이 에서 수행되는 모든 일치를 강제로 단일 바이트 로케일에서 작업하고 로케일로 표현할 수있는 UTF-8 문자열을 표시 한 경우 유니 코드는 기본 POSIX 1003.2 모드에서 약 3 배의 페널티를받습니다.
'useBytes = TRUE'를 사용할 수 있다면 일치하기 전에 문자열이 으로 확인되지 않으며 실제 일치가 빨라집니다. 종종 바이트 패턴은 의 바이트 패턴이 다른 문자의 일부와 일치하지 않으므로 UTF-8 로켈에서 바이트 기반 검색으로 충분합니다.
그들의 힘은 계산 비용이 함께 제공됩니다.
,fixed=TRUE
인수를 사용하여 R의 정규식 함수에서 일반 표현식 구문 분석을 해제 할 수 있습니다. 속도 이익이 발생할 : 당신이 정규 표현식을해야하는 경우, 당신은 일반적으로 (perl=TRUE
설정에 의해) PCRE 라이브러리를 사용하여 기본 정규 표현식 엔진을 통해 성능 향상을 얻을 수 있습니다
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
차갑다. 아마도 반복 된 벡터가 많으면 잘 작동 할 수있는 요소가있는 트릭이 있습니다 .... –