45

function を使用するsort(x)と、xは文字で、文字「y」は文字「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"

その理由は、私がリトアニアにいるためかもしれません。これは「リトアニア風」の文字の並べ替えですが、通常の並べ替えが必要です。Rコード内でソート方法を通常に戻すにはどうすればよいですか?

Win7 で R 2.15.2 を使用しています。

4

2 に答える 2

39

Rが実行されているロケールを変更する必要があります。Windowsインストール全体(最適ではないようです)に対して、またはRセッション内で次の方法で変更します。

Sys.setlocale("LC_COLLATE", "C")

代わりに他の有効なロケール文字列を使用できます"C"が、これにより、必要な並べ替え順序に戻ることができますletters

詳細についてはお読みください?locales

Sys.getlocale()ロケールパラメータの現在の設定を照会する姉妹関数に注目する価値があると思います。したがって、あなたはすることができます

(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"

もちろん、これは、devtoolsをインストールすると、@ Hadley'sAnswerwith_collate()がやや簡潔に実行することを示しています。

于 2013-01-22T12:21:45.563 に答える
34

これを一時的に行いたい場合は、次の機能をdevtools提供します。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"
于 2013-01-22T13:26:36.993 に答える