В чем разница между fixed () и coll () для сопоставления строк? - PullRequest
1 голос
/ 15 апреля 2019

Почти все файлы справки из пакета stringr содержат эту строку

Соответствует фиксированной строке (т. Е. Сравнивая только байты), используя метод fixed ().Это быстро, но приблизительно.Как правило, для сопоставления человеческого текста вам понадобится coll (), который соблюдает правила сопоставления символов для указанной локали.

В базовые пакеты R не включена опция для coll (), они тольковключить опцию исправления ().Но в базовых пакетах также есть useBytes, для которого в функции установлено значение FALSE, как в grepl.

Исправлено () то же самое, что и fixed = TRUE, useBytes = TRUE, а coll () то же самое, что и fixed = TRUE, useBytes = FALSE?Я новичок в stringr и пытаюсь найти эквивалент.

1 Ответ

1 голос
/ 15 апреля 2019

coll() для «поиска сличений».Вот точный пример из vignette("stringr")


coll(x) ищет совпадение с x, используя правила сортировки на человеческом языке, и это особенно важно, если вы хотите выполнять сопоставление без учета регистра.Правила сортировки различаются по всему миру, поэтому вам также потребуется указать параметр локали.

i <- c("I", "İ", "i", "ı")
i
#> [1] "I" "İ" "i" "ı"

str_subset(i, coll("i", ignore_case = TRUE))
#> [1] "I" "i"
str_subset(i, coll("i", ignore_case = TRUE, locale = "tr"))
#> [1] "İ" "i"

Недостатком coll() является скорость.Поскольку правила распознавания, какие символы являются одинаковыми, сложны, coll() относительно медленный по сравнению с regex() и fixed().Обратите внимание, что когда fixed() и regex() имеют ignore_case arguments, они выполняют намного более простое сравнение, чем coll()


Так что в основном coll() использует информацию из данной локали, чтобы узнать, чтосимволы в основном означают одно и то же и позволяют им соответствовать друг другу, даже если технически это разные символы.

...