Pytanie Dlaczego "jeden" <2 ... FALSE w R?


Czytam sekcję Advanced R Hadleya Wickhama o przymusie i nie mogę znaleźć odpowiedzi na to pytanie. Zakładam, że R wymusza 2 na postać, ale nie rozumiem, dlaczego R zwraca FALSE zamiast zwracać błąd. (To jest dla mnie szczególnie zagadkowe, ponieważ -1 <"jeden" zwraca TRUE). Moje pytanie jest zatem dwojakie: po pierwsze, dlaczego ta odpowiedź, a po drugie, czy istnieje sposób sprawdzenia, w jaki sposób R przekształca poszczególne elementy w logicznym wektorze, jak te przykłady?


14
2017-11-18 22:24


pochodzenie


Wskazówka: sort(c("one","2","-1","10")) (10 nie jest konieczne, ale może dać ci kolejny przykład do rozważenia: "10"<"2") - Ben Bolker
tego rodzaju dziwactwa pojawiają się we wszystkich językach programowania, staraj się zawsze dbać o typ danych, z którym pracujesz i porównuj jabłka z jabłkami i pomarańcze z pomarańczami. - Elzo Valugi
Przymus jest rozpowszechniony w R. Jest to język słabo napisany. Jeśli nie lubisz tej funkcji, użyj Java. Kiedy patrzysz na postacie z "<", jest to początkowo porównanie porządku sortowania specyficznego dla ustawień narodowych pierwszego znaku do pierwszego znaku. Patrzeć na : ..... '\t9999' < " 00000" - 42-
Dzięki za podpowiedź. Widzę, jak "sortowanie" ujawnia, jaka jest odpowiedź, ale nadal nie rozumiem, jak działa sam sort. (Próbowałem pomocy w sortowaniu, ale nie znalazłem tam wyjaśnienia dla tego konkretnego problemu) (OK, na podstawie BondedDust, rozumiem, dlaczego "10" <2 ". - JoeF
Związane z: stackoverflow.com/questions/14932015/why-does-true-true-in-r/...; stackoverflow.com/questions/18964562/... - Henrik


Odpowiedzi:


Od help("<"):

Jeśli dwa argumenty są wektorami atomowymi różnych typów, jeden jest   przymuszone do typu drugiej, (malejącej) kolejności pierwszeństwa   jest charakter, złożony, numeryczny, całkowity, logiczny i surowy.

Tak więc w tym przypadku liczba ma niższy priorytet niż znak. Więc 2 jest przymuszony do postaci "2". Porównanie łańcuchów w wektorach znaków jest leksykograficzne, które, jak rozumiem, są alfabetyczne, ale zależą od lokalizacji.


14
2017-11-18 22:33





Przekształca 2 w postać, a następnie dokonuje porównania alfabetycznego. Zakłada się, że znaki numeryczne pojawią się przed znakami alfabetycznymi

uzyskać ogólny pogląd na temat zachowania

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

9
2017-11-18 22:32



Zastanawiam się, czy istnieją jakieś ogólne (tj. Uniwersalne w różnych lokalizacjach) gwarancja, że ​​liczby występują przed znakami alfabetu w porządku sortowania? - Ben Bolker
Dzięki. Oznaczałbym ten i ten przez jdharrison, ponieważ oba są poprawne, ale wydaje mi się, że mogę oznaczyć tylko jedno z nich w ten sposób. - JoeF