2011-08-29 9 views
15

Rは、文字ベクトルをASCIIではなくアルファベットとして記述するシーケンスでソートします。例えば文字ベクトルのRソートルールは何ですか?

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

3つの質問:

  1. このソート順序を記述するための技術的に正しい用語は何ですか?
  2. 私はCRANのマニュアルでこれを参照することができません。 Rのソートルールの説明はどこで見つけることができますか?
  3. これは、C、Java、Perl、PHPなどの他の言語のこの種の動作とは異なりますか? sort()状態の
+0

[文字列のソートを無視しない](http://stackoverflow.com/q/4245196/271616)に関連する –

答えて

21

Details:

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

help(Comparison)、その後示しています

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. 

をので、それはあなたのロケール設定によって異なります。

+1

D'oh。私はhttp://cran.r-project.org/doc/manuals/R-ints.htmlでこれを見つけようとしていました。ありがとうございました。 – Andrie

+3

私はDirkとヘルプの説明を改善しようとはしませんが、Rの外では、それは辞書不変ではあるが、辞書順ソートとして記述されることがあります。純粋なテキスト処理は通常、他の言語では悪い英語のオーダーに関して行われるため、照合ルールは重大な考慮事項です。良い例は、厳密なA-Z順序で26文字のみを考えているネイティブスピーカー*または*人の名前ソートを本当に変に見せることです。 – Iterator

+0

私はちょうどスペース文字が無視されているかどうかを知り、それがローカルでテストを実行していたか、 'R CMD check'を行っているかによって変わってしまったのですか? –