Sto leggendo la sezione Advanced R di Hadley Wickham sulla coercizione, e non riesco a capire la risposta a questa domanda. Suppongo che R costringa 2 a un personaggio, ma non capisco perché R restituisce FALSE invece di restituire un errore. (Questo mi rende particolarmente strano dal momento che -1 "<" uno "restituisce VERO). Quindi la mia domanda è duplice: in primo luogo, perché questa risposta, e in secondo luogo, c'è un modo per vedere come R converte i singoli elementi all'interno di un vettore logico come questi esempi?Perché "one" <2 ... FALSE in R?
risposta
Da help("<")
:
Se i due argomenti sono vettori atomiche di tipo diverso, uno è forzato al tipo dell'altro, l'ordine di precedenza (decrescente) essendo carattere, complesso, numerico, intero, logico e grezzo.
Quindi in questo caso, il numerico ha una precedenza inferiore rispetto al carattere. Quindi 2
è forzato al carattere "2"
. Il confronto di stringhe nei vettori di caratteri è lessicografico che, a quanto ho capito, è alfabetico ma dipendente dal locale.
Converte 2 in un carattere, quindi esegue un confronto alfabetico. E caratteri numerici sono assunti a venire prima di quelli alfabetici
per avere un'idea generale sul comportamento provare
'a'<'1'
'1'<'.'
'b'<'B'
'a'<'B'
'A'<'B'
'C'<'B'
Mi chiedo se ci sia un generale (cioè universale attraverso le impostazioni locali) che i numeri vengano prima dei caratteri alfabetici nell'ordine di confronto? –
Grazie. questo e quello di jdharrison poiché entrambi hanno ragione, ma sembra che io possa segnarne solo uno in quel modo. – JoeF
suggerimento: 'sort (c (" uno "," 2 "," - 1 "," 10 "))' (il 10 non è necessario ma potrebbe darvi un altro esempio per meditare: '" 10 "<" 2 "') –
questo tipo di stranezze appaiono in tutti i linguaggi di programmazione, cerca di occuparti sempre del tipo di dati con cui stai lavorando e confronta le mele con le mele e le arance con le arance. –
La coercizione è diffusa in R. È un linguaggio debolmente tipizzato. Se non ti piace questa funzione, quindi utilizzare Java. Quando si guardano i caratteri con "<", inizialmente è un confronto dell'ordine di confronto specifico della locale del primo carattere al primo carattere. Guarda: ..... ''\ t9999' <" 00000 "' –