Почему R 3.6.0 возвращает FALSE при оценке выражения ("Dogs" <"cats")? - PullRequest
12 голосов
/ 07 июня 2019

У меня есть некоторый сложный код, но вместо того, чтобы показать вам это, я собираюсь извлечь суть проблемы.

Оценка: "dogs" < "cats" ... Это должно оценить FALSE, и это соответствует R 3.6.

Оценка: "Dogs" < "cats"… Это должно быть равно TRUE, потому что ASCII-код для «D» равен 68, а ASCII-код для «c» равен 99. Поскольку 68 <99, <code>"Dogs" < "cats" должен оценить TRUE, но не в R 3.6.0. Однако когда я попытался использовать окно консоли на веб-сайте https://datacamp.com, выражение "Dogs" < "cats" вернуло TRUE, а выражение "dogs" < "Cats" вернуло FALSE - как и ожидалось.

Следовательно, мой вопрос: почему R 3.6.0 возвращает FALSE для ("Dogs" < "cats")?

1 Ответ

15 голосов
/ 07 июня 2019

Переводчик в DataCamp показывает:

> Sys.getlocale()
[1] "C"

тогда как у меня и, возможно, у вас:

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"

В локали "C" символы сравниваются по значениям ascii, тогда как для en_US.UTF-8 они переходят в aAbBcC и т. Д.

Как упомянуто в комментариях, это объясняется далее в документации по реляционным операторам:

Сравнение строк в символьных векторах лексикографически в строках с использованием упорядоченной последовательности используемой локали: см. Локали. Порядок сортировки локалей, таких как en_US, обычно отличается от C (который должен использовать ASCII) и может удивлять. Остерегайтесь делать какие-либо предположения о порядке сортировки: например, в эстонском языке Z находится между S и T, и сопоставление не обязательно символьное - в датском aa сортируется как одна буква после z. В валлийском языке ng может быть или не быть единственной сортировочной единицей: если это так, то следует g. Некоторые платформы могут не уважать локаль и всегда сортировать в числовом порядке байтов в 8-битной локали или в порядке кодовой точки Unicode для локали UTF-8 (и могут не сортировать в том же порядке для того же языка в разные наборы символов). Сопоставление не букв (пробелы, знаки пунктуации, дефисы, дроби и т. Д.) Еще более проблематично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...