2011-08-29 12 views
15

R ordena los vectores de caracteres en una secuencia que describo como alfabética, no como ASCII.¿Cuáles son las reglas de clasificación R de los vectores de caracteres?

Por ejemplo:

sort(c("dog", "Cat", "Dog", "cat")) 
[1] "cat" "Cat" "dog" "Dog" 

tres preguntas:

  1. ¿Cuál es la terminología técnicamente correcta para describir este orden?
  2. No encuentro ninguna referencia al respecto en los manuales de CRAN. ¿Dónde puedo encontrar una descripción de las reglas de clasificación en R?
  3. ¿Es esto diferente de este tipo de comportamiento en otros lenguajes como C, Java, Perl o PHP?
+0

relacionado con [No ignorar el caso en la ordenación de cadenas de caracteres] (http://stackoverflow.com/q/4245196/271616). –

Respuesta

21

Details: para sort() estados:

The sort order for character vectors will depend on the collating 
sequence of the locale in use: see ‘Comparison’. The sort order 
for factors is the order of their levels (which is particularly 
appropriate for ordered factors). 

y help(Comparison) muestra a continuación:

Comparison of strings in character vectors is lexicographicwithin 
the strings using the collating sequence of the locale in use:see 
‘locales’. The collating sequence of locales such as ‘en_US’ is 
normally different from ‘C’ (which should use ASCII) and can be 
surprising. Beware of making _any_ assumptions about the 
collation order: e.g. in Estonian ‘Z’ comes between ‘S’ and ‘T’, 
and collation is not necessarily character-by-character - in 
Danish ‘aa’ sorts as a single letter, after ‘z’. In Welsh ‘ng’ 
may or may not be a single sorting unit: if it is it follows ‘g’. 
Some platforms may not respect the locale and always sort in 
numerical order of the bytes in an 8-bit locale, or in Unicode 
point order for a UTF-8 locale (and may not sort in the same order 
for the same language in different character sets). Collation of 
non-letters (spaces, punctuation signs, hyphens, fractions and so 
on) is even more problematic. 

por lo que depende de su configuración local.

+1

D'oh. Intentaba encontrar esto en http://cran.r-project.org/doc/manuals/R-ints.html. Gracias. – Andrie

+3

No intentaré mejorar la descripción de Dirk y la ayuda, pero fuera de R, uno podría encontrarlo descrito como clasificación lexicográfica, aunque no invariante. La regla de intercalación es una consideración seria, ya que el procesamiento de texto ingenuo generalmente se realiza con respecto al orden en inglés, lo cual es malo para algunos otros idiomas. Un buen ejemplo es que la clasificación de nombres se ve muy extraña para los hablantes nativos * o para las personas que solo piensan en 26 letras en estricto orden A-Z. – Iterator

+0

y acabo de pasar mucho tiempo descubriendo que los caracteres espaciales pueden o no ser ignorados, y que esto cambió dependiendo de si estaba ejecutando pruebas localmente o haciendo 'R CMD check' –

Cuestiones relacionadas