Я читаю раздел Хэдли Уикхэма Advanced R по принуждению, и я не могу понять ответ на этот вопрос. Я предполагаю, что R принуждает 2 к символу, но я не понимаю, почему R возвращает FALSE вместо того, чтобы возвращать ошибку. (Это особенно озадачивает меня с -1 < «один» возвращает TRUE). Поэтому мой вопрос в два раза: во-первых, почему этот ответ, а во-вторых, есть ли способ увидеть, как R преобразует отдельные элементы в логический вектор, подобные этим примерам?Почему «один» <2 ... ЛОЖЬ в R?
ответ
От help("<")
:
Если два аргумента атомные векторов различных типов, один - , принудительный к типу другого, (убывающий) порядок приоритета является символом, сложным, числовым, целым, логическим и необработанным.
В этом случае числовое значение имеет более низкий приоритет, чем символ. Таким образом, 2
принуждается персонажу "2"
. Сравнение строк в векторах символов является лексикографическим, что, как я понимаю, является алфавитным, но зависящим от языка.
Он принуждает 2 к персонажу, затем он выполняет алфавитное сравнение. И числовые символы предполагаются прийти до алфавитного тех
, чтобы получить общее представление о поведении попробовать
'a'<'1'
'1'<'.'
'b'<'B'
'a'<'B'
'A'<'B'
'C'<'B'
Интересно, есть ли какие-либо общие (т. Е. Универсальные по локалям), чтобы цифры поступали до алфавитных символов в порядке сортировки? –
Спасибо. это одно и одно из jdharrison, поскольку оба являются правильными, но, похоже, я могу отметить только один из них. – JoeF
Подсказка: 'sort (c (" one "," 2 "," - 1 "," 10 "))' (10 не является необходимым, но может дать вам еще один пример для размышления: '" 10 "<" 2 "') –
такие причуды появляются на всех языках программирования, старайтесь всегда заботиться о типе данных, с которым вы работаете, и сравниваете яблоки с яблоками и апельсинами с апельсинами. –
Принуждение широко распространено в R. Это слабо типизированный язык. Если вам не нравится эта функция, используйте Java. Когда вы смотрите на символы с «<», это изначально сравнение локального порядка сортировки первого символа с первым символом. Посмотрите на: ..... '' \ t9999 '<"00000" ' –