2014-11-18 4 views
12

Я читаю раздел Хэдли Уикхэма Advanced R по принуждению, и я не могу понять ответ на этот вопрос. Я предполагаю, что R принуждает 2 к символу, но я не понимаю, почему R возвращает FALSE вместо того, чтобы возвращать ошибку. (Это особенно озадачивает меня с -1 < «один» возвращает TRUE). Поэтому мой вопрос в два раза: во-первых, почему этот ответ, а во-вторых, есть ли способ увидеть, как R преобразует отдельные элементы в логический вектор, подобные этим примерам?Почему «один» <2 ... ЛОЖЬ в R?

+7

Подсказка: 'sort (c (" one "," 2 "," - 1 "," 10 "))' (10 не является необходимым, но может дать вам еще один пример для размышления: '" 10 "<" 2 "') –

+1

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

+2

Принуждение широко распространено в R. Это слабо типизированный язык. Если вам не нравится эта функция, используйте Java. Когда вы смотрите на символы с «<», это изначально сравнение локального порядка сортировки первого символа с первым символом. Посмотрите на: ..... '' \ t9999 '<"00000" ' –

ответ

12

От help("<"):

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

В этом случае числовое значение имеет более низкий приоритет, чем символ. Таким образом, 2 принуждается персонажу "2". Сравнение строк в векторах символов является лексикографическим, что, как я понимаю, является алфавитным, но зависящим от языка.

8

Он принуждает 2 к персонажу, затем он выполняет алфавитное сравнение. И числовые символы предполагаются прийти до алфавитного тех

, чтобы получить общее представление о поведении попробовать

'a'<'1' 
'1'<'.' 
'b'<'B' 
'a'<'B' 
'A'<'B' 
'C'<'B' 
+1

Интересно, есть ли какие-либо общие (т. Е. Универсальные по локалям), чтобы цифры поступали до алфавитных символов в порядке сортировки? –

+0

Спасибо. это одно и одно из jdharrison, поскольку оба являются правильными, но, похоже, я могу отметить только один из них. – JoeF