2014-11-18 13 views
12

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?

+7

suggerimento: 'sort (c (" uno "," 2 "," - 1 "," 10 "))' (il 10 non è necessario ma potrebbe darvi un altro esempio per meditare: '" 10 "<" 2 "') –

+1

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. –

+2

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 "' –

risposta

12

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.

8

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' 
+1

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? –

+0

Grazie. questo e quello di jdharrison poiché entrambi hanno ragione, ma sembra che io possa segnarne solo uno in quel modo. – JoeF

Problemi correlati