tienen - quien ordeno el alfabeto
La letra "y" viene después de "i" cuando se ordena alfabéticamente (2)
Cuando se usa la función sort(x)
, donde x
es un carácter, la letra "y" salta al medio, justo después de la letra "i":
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
[21] "u" "v" "w" "x" "y" "z"
> sort(letters)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "y" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[21] "t" "u" "v" "w" "x" "z"
La razón puede ser que estoy en Lituania, y esta es una clasificación de letras de tipo "lituano", pero necesito una clasificación normal. ¿Cómo cambio el método de clasificación a normal dentro del código R?
Estoy usando R 2.15.2 en Win7.
Debe cambiar la configuración regional en la que se está ejecutando R. O haga eso para su instalación completa de Windows (que parece subóptima) o dentro de las sesiones de R a través de:
Sys.setlocale("LC_COLLATE", "C")
Puede usar cualquier otra cadena de configuración regional válida en lugar de "C"
, pero eso debería hacer que vuelva al orden de las letters
que desea.
Leer ?locales
para más.
Supongo que vale la pena señalar la función hermana Sys.getlocale()
, que consulta la configuración actual de un parámetro de configuración regional. Por lo que podrias hacer
(locCol <- Sys.getlocale("LC_COLLATE"))
Sys.setlocale("LC_COLLATE", "lt_LT")
sort(letters)
Sys.setlocale("LC_COLLATE", locCol)
sort(letters)
Sys.getlocale("LC_COLLATE")
## giving:
> (locCol <- Sys.getlocale("LC_COLLATE"))
[1] "en_GB.UTF-8"
> Sys.setlocale("LC_COLLATE", "lt_LT")
[1] "lt_LT"
> sort(letters)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "y" "j" "k" "l" "m" "n"
[16] "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "z"
> Sys.setlocale("LC_COLLATE", locCol)
[1] "en_GB.UTF-8"
> sort(letters)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o"
[16] "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
> Sys.getlocale("LC_COLLATE")
[1] "en_GB.UTF-8"
que, por supuesto, es lo que @ Hadley''s Answer muestra con with_collate()
haciendo un poco más sucintamente una vez que haya instalado devtools .
Si quieres hacer esto temporalmente, devtools
proporciona la función with_collate
:
library(devtools)
with_collate("C", sort(letters))
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
# [20] "t" "u" "v" "w" "x" "y" "z"
with_collate("lt_LT", sort(letters))
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "y" "j" "k" "l" "m" "n" "o" "p" "q" "r"
# [20] "s" "t" "u" "v" "w" "x" "z"