2014-11-18 5 views
12

Ich lese Hadley Wickhams Advanced R Abschnitt über Zwang, und ich kann die Antwort auf diese Frage nicht herausfinden. Ich nehme an, dass R 2 zu einem Zeichen zwingt, aber ich verstehe nicht, warum R FALSE zurückgibt, anstatt einen Fehler zurückzugeben. (Das ist mir besonders rätselhaft seit -1 < "Eins" gibt TRUE zurück). Also meine Frage ist zweifach: erstens, warum diese Antwort, und zweitens, gibt es eine Möglichkeit zu sehen, wie R die einzelnen Elemente in einem logischen Vektor wie diese Beispiele umwandelt?Warum ist "eins" <2 ... FALSCH in R?

+7

Hinweis: 'sort (c (" eins "," 2 "," - 1 "," 10 "))' (die 10 ist nicht notwendig, aber könnte Ihnen ein anderes Beispiel geben, um zu überlegen: '" 10 "<" 2 "') –

+1

Diese Art von Macken erscheinen in allen Programmiersprachen, versuchen Sie immer auf den Datentyp zu achten, mit dem Sie arbeiten und vergleichen Sie Äpfel mit Äpfeln und Orangen mit Orangen. –

+2

Zwang ist in R weit verbreitet. Es ist eine schwach typisierte Sprache. Wenn Ihnen diese Funktion nicht gefällt, verwenden Sie Java. Wenn Sie sich Zeichen mit "<" ansehen, handelt es sich zunächst um einen Vergleich der länderspezifischen Sortierreihenfolge des ersten Zeichens mit dem ersten Zeichen. Schau dir an: ..... ''\ t9999' <" 00000 "' –

Antwort

12

Von help("<"):

Wenn die beiden Argumente Atom Vektoren verschiedenen Typen sind, eine ist gezwungen, um den Typ der anderen, die (abnehmende) Reihenfolge der Priorität wird Zeichen, komplexe, numerische, ganze, logische und rohe.

In diesem Fall hat der numerische Wert eine niedrigere Priorität als das Zeichen. So wird 2 zum Zeichen "2" gezwungen. Der Vergleich von Strings in Zeichenvektoren ist lexikographisch, das, wie ich es verstehe, alphabetisch, aber ortsabhängig ist.

8

Erzwingt 2 in ein Zeichen, dann führt es einen alphabetischen Vergleich. Und numerische Zeichen vor alphabetisch diejenigen kommen angenommen

eine allgemeine Idee auf dem Verhalten zu bekommen versuchen

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

ich frage mich, ob eine allgemeine (dh universal über locales) Garantie gibt es, dass vor alphabetischen Zeichen in der Sortierreihenfolge kommen Zahlen? –

+0

Danke. ich würde markieren diese und die von jdharrison, da beide richtig sind, aber es scheint, ich kann nur einen von ihnen auf diese Weise markieren. – JoeF

Verwandte Themen